第三章 基础算法和数据结构高频题 I
区间类问题
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的更多相关文章
- 基础算法和数据结构高频题 II
DFS的两种理解方式:1. 按照实际执行顺序模拟 (适合枚举型DFS,下节课内容)2. 按照DFS的定义宏观理解 (适合分治型DFS,本节课内容) 1 Convert BST to Greater T ...
- 《Java程序设计》第三章-基础语法
20145221<Java程序设计>第三章-基础语法 总结 教材学习内容总结 类型.变量与运算符 类型 Java可区分为基本类型(Primitive Type)和类类型(Class Typ ...
- 《Go语言圣经》阅读笔记:第三章基础数据类型
第三章 基础数据类型 Go语言将数据类型分为四类: 基础类型 数字 整数 浮点数 复数 字符串 布尔 复合类型 数据 结构体 引用类型 指针 切片 字典 函数 通道 接口类型 在此章节中先介绍基础类型 ...
- Java 学习笔记 ------第三章 基础语法
本章学习目标: 认识类型与变量 学习运算符的基本使用 了解类型转换细节 运用基本流程语法 一.类型(基本类型) 所谓基本类型,就是在使用时,得考虑一下数据用多少内存长度存比较经济,利用程序语法告诉JV ...
- C语言 第三章 基础编程测试与练习
1.屏幕上输出:This is a C program 2.输入两个整数,求两个数的和,如下所示:请输入第1个数:5请输入第2个数:3 3加5的和是8 3.完成华氏温度与摄氏温度间的转换,如下所示:请 ...
- php三种基础算法:冒泡,插入和快速排序法
$array = array(2,3,5,6,9,8,1); //冒泡排序思想,前后元素比较 function sort_bulldle($array){ $num = count($array); ...
- PL/SQL第三章 基础查询语句
--查询所有列 select * from tab_name|view_name; SELECT * FROM emp; SELECT * FROM (SELECT * FROM emp); --查询 ...
- Java第三章基础学习课后题练习
小结:final 类型 变量名 = 数值 定义常量使用 变量的原则*** 一定要"先声明,后使用",变量使用前必须先声明.这点就没php好玩:两种键盘输入方式InputStream ...
- [NOIP 2014复习]第三章:动态规划——NOIP历届真题回想
背包型动态规划 1.Wikioi 1047 邮票面值设计 题目描写叙述 Description 给定一个信封,最多仅仅同意粘贴N张邮票,计算在给定K(N+K≤40)种邮票的情况下(假定全部的邮票数量都 ...
随机推荐
- mogodbshell中数组对象查询修改方法
在mongodb中,存在如下数据 { "_id" : ObjectId("59af55078a8fc5e51ff425de"), "title&quo ...
- 07 jQuery的位置信息
一.宽度和高度 获取宽度 .width() 描述:为匹配的元素集合中获取第一个元素的当前计算宽度值.这个方法不接受任何参数..css(width) 和 .width()之间的区别是后者返回一个没有单位 ...
- happy machine learning(Second One)
发现机器学习就根本停不下来 今天来用RNN算法来爽爽僵尸网络宿主预测 首先我们下载好数据,然后打开我们可爱的熊猫 import numpy as np import pandas as pd impo ...
- List中的set方法和add方法
public class TestList {public static void main(String[] args){ List l1 = new LinkedList(); for(i ...
- 详解Linux运维工程师必备技能
张戈大神是腾讯的一名运维,张戈博客也是我接触到第一个 Linux 运维师的博客,最近也在接触 Linux,说到工具,在行外可以说是技能,在行内一般称为工具,就是运维必须要掌握的工具. 我就大概列出这几 ...
- 一个简易的css reset
/*css reset*/ /*清除内外边距*/ body, h1, h2, h3, h4, h5, h6, p, hr, /*结构元素*/ ul, ol, li, dl, dt, dd, /*列表元 ...
- [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist
这个问题是由于data的目录下没有安装数据库表 解决方法: vi /etc/my.cnf 修改为正确的datadir=“xxxxx”即可 然后service mysqld start service ...
- 每日一问:谈谈 SharedPreferences 的 apply() 和 commit()
SharedPreferences 应该是任何一名 Android 初学者都知道的存储类了,它轻量,适合用于保存软件配置等参数.以键值对的 XML 文件形式存储在本地,程序卸载后也会一并清除,不会残留 ...
- navicat远程连接mysql10060
navicat连接mysql时,出现2003-Can't connect to MySql server on '47.106.228.160'(10060"Unknow error&quo ...
- 设计模式-观察者模式(Observer)
观察者模式是行为模式的一种,它的作用是当一个对象的状态发生变化时,能够自动通知关联对象,自动刷新对象状态. 观察者模式提供给关联对象一种同步通信的手段,使某个对象与依赖它的其他对象之间保持状态同步. ...