10.28 - 九章高级算法班题目大总结(1,2课)

课程1: 前向型指针和heap的应用
Kth Smallest Number in Sorted Matrix:用heap做比较直接,不过这题还可以用二分法来做。按值二分,最小值为[0,0],最大值为[m-1,n-1],二分法的时候,找到处每一行小于mid的值的个数,也就是找出index,然后看看是大于还是小于k,最后返回值是low,算是一种比较有意思的解法

Minimum Size Subarray Sum: 找最短区间使其和大于某个值,典型的前向型指针,也就是先前进j,然后缩短i

Longest Substring Without Repeating Characters: 典型的前向型指针问题,用hash来保存访问过的char

Longest Substring with At Most K Distinct Characters: 前向型指针问题,用hashmap来保存每个字符出现的次数,利用hash的大小来决定是否前进j

Kth Smallest Sum In Two Sorted Arrays: 经典的二分法的题目,就是不停得扔一半扔一半就好了

Kth Largest in N Arrays:先排序,然后把值都放到heap里

Two Sum - Less than or equal to target: 对向型指针,利用range来计数

Kth Smallest Numbers in Unsorted Array: quick select的题目

Triangle Count: 固定一个值(作为最长边),然后对向型指针找另两个值

Minimum Window Substring: 稍微麻烦点的前向型指针问题,不过套路都一样,用两个hash记录target和当前window里的所有字符,并且用一个count来记录当前已经添加的有效字符个数,当count小于target的长度是延长j

课程2: 并查集和Trie树
Number of Islands: 基本的并查集的应用

Connecting Graph:还是简单的并查集

Connecting Graph II: 并查集,加上一个hash来记录每一个boss的大小

Connecting Graph III: 并查集,用一个count来记录个数,每union一次count - 1

Graph Valid Tree: 两个条件,一是所有边的两个点在union之前没有同一个father(否则就有环了),二是所有的点最终都只有一个boss

Add and Search Word:用Trie,只是在search 的时候要用一个递归来出“.”的情况

Implement Trie: Trie的基本

Find the Weak Connected Component in the Directed Graph: 并查集,要注意一下union的时候点的方向

Connected Component in Undirected Graph: 和上一题是一样的

Word Search: DFS的题

Number of Islands II:并查集,每添加一个岛屿的时候,要对其上下左右进行判断是否要union

Word Search II:因为有多个单词,用Trie,不过直接loop好像也能过

Surrounded Regions: DFS/BFS/并查集都可以做

Boggle Game:

Word Squares:用Trie来实现找prefix,每加入一个单词,就可以直到下一行的prefix是什么,然后找出所有prefix符合的,尝试着加入(dfs过程)

Interval Sum II: 比较典型的segment tree的问题,觉得面试的时候要问segment tree的题目的话,真是要花好大精力去写

Count of Smaller Number before itself: 这题可以用segment tree来做,但是我打算用mergesort的想法来做一下,感觉更加直观一些,在merge那一步搞点事情,能写,不过写起来有点费劲

推荐阅读更多精彩内容