区间类问题

1 Missing Interval

    public List<String> findMissingRanges(int[] nums, int lower, int upper) {
List<String> res = new ArrayList<>();
if (nums == null || nums.length == ) {
return res;
}
addRange(res, lower, (long)nums[] - );
for (int i = ; i < nums.length; i++) {
addRange(res, (long)nums[i - ] + , (long)nums[i] - );
}
addRange(res, (long)nums[nums.length - ] + , upper);
return res;
} void addRange(List<String> res, long l, long r) {
if (l > r) {
return;
}
if (l == r) {
res.add(l + "");
return;
}
res.add(l + "->" + r);
}

2 Merge intervals

    public List<Interval> merge(List<Interval> inte)
{
List<Interval> res = new ArrayList<>();
inte.sort(Comparator.comparing(i -> i.start));
Interval last = null;
for (Interval item : inte) {
if (last == null || last.end < item.start) {
res.add(item);
last = item;
} else {
last.end = Math.max(item.end, last.end);
}
}
return res;
}

3 Insert interval

    public ArrayList<Interval> insert(ArrayList<Interval> intervals, Interval newInterval)
{
ArrayList<Interval> res = new ArrayList<Interval>();
int id = ;
while (id < intervals.size() && intervals.get(id).start < newInterval.start) {
id++;
}
intervals.add(id, newInterval);
Interval last = null;
for (Interval item : intervals) {
if (last == null || last.end < item.start) {
res.add(item);
last = item;
} else {
last.end = Math.max(item.last, last.end);
}
}
return res;
}

Hash  字符/ 字符串统计类问题

4 First Position Unique Character

    public int firstUniqChar(String s) {
// write your code here\
int[] num = new int[];
for (char c : s.toCharArray()) {
num[c]++;
}
for (int i = ; i < s.length(); i++) {
if (num[s.charAt(i)] == ) {
return i;
}
}
return -;
}

5 Substring Anagrams

  public List<Integer> findAnagrams(String s, String p) {
List<Integer> res = new ArrayList<>();
if (s.length() < p.length()) {
return res;
}
char[] cs = s.toCharArray();
char[] ps = p.toCharArray();
int[] det = new int[];
int absSum = ;
for (int i = ; i < p.length(); i++) {
det[cs[i]]++;
det[ps[i]]--;
}
for (int i = ; i < ; i++) {
absSum += Math.abs(det[i]);
}
if (absSum == ) {
res.add();
}
for (int i = p.length(); i < s.length(); i++) {
char l = cs[i - ps.length];
char r = cs[i];
absSum = absSum - Math.abs(det[l]) - Math.abs(det[r]); det[l]--;
det[r]++; absSum = absSum + Math.abs(det[l]) + Math.abs(det[r]);
if (absSum == ) {
res.add(i - ps.length + );
}
}
return res;
}

6 Word Abbreviation Set

class VaildWordAbbr {
private Map<String, Integer> dict = new HashMap<>();
private Map<String, Integer> abbr = new HashMap<>();
public VaildWordAbbr(String[] dic) {
for (String str : dic) {
dict.put(str, dict.getOrDefault(str, ) + );
String abb = getAbbr(str);
dict.put(abb, dict.getOrDefault(abb, ) + );
}
} public boolean isUnique(String word) {
String a = getAbbr(word);
return dict.get(word) == abbr.get(a);
} String getAbbr(String word) {
if (word.length() < ) {
return word;
}
return "" + word.charAt() + (word.length() - ) + word.charAt(word.length() - );
}

7 Longest Consecutive Sequence

    public int longestConsecutive(int[] num)
{
// write you code here
if (num == null || num.length == )
{
return ;
}
HashSet<Integer> set = new HashSet<Integer>();
for (int i : num) {
set.add(i);
}
int res = ;
for (int item : num) {
if (set.contains(item)) {
set.remove(item);
int l = item - ;
int r = item + ;
while (set.contains(l)) {
set.remove(l);
l--;
}
while (set.contains(r)) {
set.remove(r);
r++;
}
res = Math.max(res, r - l - );
}
}
return res;
}

8 Load Balancer

class LoadBalance {
private List<Integer> list = new ArrayList<>();
private Map<Integer, Integer> map = new HashMap<>();
private int n = ;
private Random r = new Random();
public LoadBalance() { } public void add(int id) {
if (!map.containsKey(id)) {
list.add(id);
map.put(n, id);
n++;
}
} public void remove(int id) {
if (map.containsKey(id)) {
int lastItem = list.get(n - );
int removeIndex = map.get(id); map.put(lastItem, removeIndex);
list.set(removeIndex, lastItem);
list.remove(n - );
map.remove(id);
n--;
}
} public int pick() {
return list.get(r.nextInt(n));
} }

第三章 基础算法和数据结构高频题 I的更多相关文章

  1. 基础算法和数据结构高频题 II

    DFS的两种理解方式:1. 按照实际执行顺序模拟 (适合枚举型DFS,下节课内容)2. 按照DFS的定义宏观理解 (适合分治型DFS,本节课内容) 1 Convert BST to Greater T ...

  2. 《Java程序设计》第三章-基础语法

    20145221<Java程序设计>第三章-基础语法 总结 教材学习内容总结 类型.变量与运算符 类型 Java可区分为基本类型(Primitive Type)和类类型(Class Typ ...

  3. 《Go语言圣经》阅读笔记:第三章基础数据类型

    第三章 基础数据类型 Go语言将数据类型分为四类: 基础类型 数字 整数 浮点数 复数 字符串 布尔 复合类型 数据 结构体 引用类型 指针 切片 字典 函数 通道 接口类型 在此章节中先介绍基础类型 ...

  4. Java 学习笔记 ------第三章 基础语法

    本章学习目标: 认识类型与变量 学习运算符的基本使用 了解类型转换细节 运用基本流程语法 一.类型(基本类型) 所谓基本类型,就是在使用时,得考虑一下数据用多少内存长度存比较经济,利用程序语法告诉JV ...

  5. C语言 第三章 基础编程测试与练习

    1.屏幕上输出:This is a C program 2.输入两个整数,求两个数的和,如下所示:请输入第1个数:5请输入第2个数:3 3加5的和是8 3.完成华氏温度与摄氏温度间的转换,如下所示:请 ...

  6. php三种基础算法:冒泡,插入和快速排序法

    $array = array(2,3,5,6,9,8,1); //冒泡排序思想,前后元素比较 function sort_bulldle($array){ $num = count($array); ...

  7. PL/SQL第三章 基础查询语句

    --查询所有列 select * from tab_name|view_name; SELECT * FROM emp; SELECT * FROM (SELECT * FROM emp); --查询 ...

  8. Java第三章基础学习课后题练习

    小结:final 类型 变量名 = 数值 定义常量使用 变量的原则*** 一定要"先声明,后使用",变量使用前必须先声明.这点就没php好玩:两种键盘输入方式InputStream ...

  9. [NOIP 2014复习]第三章:动态规划——NOIP历届真题回想

    背包型动态规划 1.Wikioi 1047 邮票面值设计 题目描写叙述 Description 给定一个信封,最多仅仅同意粘贴N张邮票,计算在给定K(N+K≤40)种邮票的情况下(假定全部的邮票数量都 ...

随机推荐

  1. javascript中&&运算符和||运算符的使用

    前言 我们在前端开发中,&&运算符和||运算符是使用率和频繁度比较高的,&&运算符和||运算符的功能特别强大,想成为一名优秀的前端工程师,&&运算符和| ...

  2. Hyperledger Fabric1.4的多机部署

    之前的文章深入解析Hyperledger Fabric启动的全过程主要讲解了Fabric的网络搭建,以及启动的整体流程,但是都是通过单机完成的.而区块链本身就是去中心化的,所以最终还是要完成Fabri ...

  3. java编程思想之面向对象

    面向对象和面向过程 面向对象(Object Oriented),简称OO,是软件开发方法的一种,我们都知道java是基于面向对象开发的,但是说到面向对象,我们不得不提一提面向过程开发,面向过程,又称结 ...

  4. J2SE的基本简介与J2EE/J2ME的差异

    J2SE简介与J2EE.J2ME的比较 Java2平台包括:标准版(J2SE).企业版(J2EE)和微缩版(J2ME)三个版本. J2SE,J2ME和J2EE,这也就是SunONE(Open NetE ...

  5. sys_init

    #!/bin/bash yum install -y wget && \ wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyu ...

  6. SQL高度优化

      受同事dd之托,优化一条boss看的报表SQL.dd写复杂疑难SQL无数,如何写出优雅的SQL自有一番心得体会.能将一条7表含inner join,left join并含有关联子查询的.返回结果集 ...

  7. 使用 Mybatis 框架 jdbc 方式批量写入 SQL Server,报错 com.microsoft.sqlserver.jdbc.SQLServerException 传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确。此 RPC 请求中提供了过多的参数,最多应为2100

    这个错是sqlserver抛出来的. 进过验证,上述错误中的2100为插入的总字段数. 比如下面这种插入方式,values后面的一个括号里的字段为30个,那么后面最多只能加70条,即这种批量插入方式一 ...

  8. Codeforces 782B:The Meeting Place Cannot Be Changed(三分搜索)

    http://codeforces.com/contest/782/problem/B 题意:有n个人,每个人有一个位置和速度,现在要让这n个人都走到同一个位置,问最少需要的时间是多少. 思路:看上去 ...

  9. flask模板语言 jinja2 以及render_template 深度用法

    是时候开始写个前端了,Flask中默认的模板语言是Jinja2 现在我们来一步一步的学习一下 Jinja2 捎带手把 render_template 中留下的疑问解决一下 首先我们要在后端定义几个字符 ...

  10. 基数排序的可复用实现(C++11/14/17/20)

    基数排序,是对整数类型的一种排序方法,有MSD (most significant digit)和LSD (least significant digit)两种.MSD将每个数按照高位分为若干个桶(按 ...