第三章 基础算法和数据结构高频题 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)种邮票的情况下(假定全部的邮票数量都 ...
随机推荐
- ireport使用笔记
近来工作中使用到ireport对打印模板改造,记录下所遇见的问题及解决方式.好记性不如烂笔头~ 关于ireport的基本操作就不作记录了,某度一搜一大把 怎样控制组件是否展示?(若组件需要展示的内容为 ...
- ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程
在前面随笔介绍的<ABP开发框架前后端开发系列---(7)系统审计日志和登录日志的管理>里面,介绍了如何改进和完善审计日志和登录日志的应用服务端和Winform客户端,由于篇幅限制,没有进 ...
- Java开发桌面程序学习(十)——css样式表使用以及Button悬浮改变样式实现
css样式表使用 javafx中的css样式,与html的有些不一样,javafx中的css,是以-fx-background-color这种样子的,具体可以参考文档JavaFx css官方文档 ja ...
- C# 简单TCP协议
namespace TCPServer { class Program { static void Main(string[] args) { ;//端口 TcpClient tcpClient;// ...
- 附008.Kubernetes TLS证书介绍及创建
一 Kubernetes证书 1.1 TLS Kubernetes系统的各个组件需要使用TLS证书对其通信加密以及授权认证,建议在部署之前先生成相关的TLS证书. 1.2 CA证书创建方式 kuber ...
- 参数传递机制之JWT
1. 什么是 JWT JWT 其全称为:JSON Web Token,简单地说就是 JSON 在 Web 上的一种带签名的标记形式.官方的定义如下: JSON Web Tokens are an op ...
- HTML连载22-序选择器(下)
一.子元素选择器 1. (1)选中标签之中只有一个子元素的子元素,并且那个标签必须使我们格式中前面指定的标签才行 (2)格式: 标签:only-chirld{属性:值:} (3)举例: p:only- ...
- 解决Tomcat catalina.out 不断膨胀,导致磁盘占用过大的问题
到服务器上看了一下任务中心的日志情况,膨胀的很快,必须采取措施限制其增长速度. 我们采用Cronlog组件对此进行日志切分,官网http://cronolog.org/一直未能打开,只能从其它地方寻找 ...
- Python解题技巧
Python解题技巧 一直都是用C++和C解题,某题简单解完后便心血来潮想用Python解一次,发现一些问题,特写此篇随笔来记录. 一. 输入格式: 例:输入第1行给出正整数n和整数m:第2行给出n个 ...
- HTML连载23-属性选择器(上)
一.属性选择器 1. (1)定义:根据指定的 属性名称找到对应的标签,然后设置属性 (2)格式:标签[属性=值]:{属性:值:] 注意:前一个值是不带引号的 (3)例子: <style> ...