总结帖

总结:

String 类题型:

通用模板: 设一个HashMap/int[] count = new int[256]. 然后双指针。

while(right < str.length()) 处理。经常会设计到Sliding Window原理。

Permutation, Swapping: Greedy 解法。通过比较leftMost 和 rightMost bit 哪个大然后看需要调换位置不。

Range_Sum, 区间子和 类题型: 

用HashMap, 或者array存储0---i 子问题的sum. 然后  arr[j] -arr[i] =中间范围的sum。

【 累加和两种套路:】

1. 如果是求存在不存在的,很有可能要map.put(0, -1)

2. 如果是求长度的,不需要

括号类问题: 大部分情况下用Stack,偶尔用DP. 不过一般Stack都能解决。

List类问题:一般会设置一个Fake Node. 然后用Cur Node遍历。 主要考研的是edge case.

Palindrome 回文类题目: 双指针遍历center,然后两边扩散。

扫描线问题: 设置一个class Node. 然后遍历。用一个Stack 或者PriorityQueue之类的。

BST 问题: 一般几种处理方式: 1. 递归traversal.   

图类问题: Union Find, 或者 建Graph + visited set + DFS  或者 Topological Sort -> Build Graph + Topological + DFS。 一般Graph的搭建其实就是建一个HashMap<..> 或者ArrayList. 就是有一个Key,和一个list of 这个Vertex能去的地方。

Union Find遍历Graph adj List的时候是double for Loop, 

Compiler 类问题: 基本都是Stack. 偶尔 Regular Expression.

DP记忆化搜索:Boob Enemy, Longest increasing Path.

随机数类问题:Random pick index, Shuffle[假设前n-1 已经random了,第n个可以随机放在n个位置]

你可能感兴趣的:(总结帖)