摘要: 方法一:Backtracing (DFS) 非常典型的回溯,必须烂熟于心。 方法二:迭代 把当前的结果vector里的所有元素 都加上当前的元素 push_back 方法三:Bit Manipulation https://leetcode.com/problems/subsets/discuss/ 阅读全文
posted @ 2018-08-24 12:15 約束の空 阅读(94) 评论(0) 推荐(0)
摘要: 拓扑排序的题目,如果b的前置课程是a,则 a->b。首先计算每个节点的入度,入度为0的结点放到队列中,类似BFS。如果最后有结点的度不为0,说明不行(有环存在)。 阅读全文
posted @ 2018-08-24 08:18 約束の空 阅读(116) 评论(0) 推荐(0)
摘要: 方法一:利用两个栈,每次push都利用另一个栈倒一遍。其中push O(n) 方法二:同样是利用两个栈,但是不同于上一种方法每次push都要倒一次。两个栈记作in和out,out顺序与queue一致。每次push都放到in中,需要pop的时候才把in倒到out中执行。相当于in作为一个缓存,out没 阅读全文
posted @ 2018-08-22 22:12 約束の空 阅读(86) 评论(0) 推荐(0)
摘要: 递归非常好写,这里主要记录非递归的写法。 Preorder 方法一:直接利用栈来写。 方法二:先左子树一路访问下去,全部访问完毕回溯并访问右边。p = s.top() 代表 p 的左子树已经全部访问完毕,p=s.top() 回到 p 结点,接着访问右子树。 除了这种 if else 写法,while 阅读全文
posted @ 2018-08-22 12:10 約束の空 阅读(170) 评论(0) 推荐(0)
摘要: 暴力的话,判断n是否是prime的时候只要循环到根号n,会超时。 另一种解法利用 埃拉托斯特尼筛法Sieve of Eratosthenes ,可以详见 http://www.cnblogs.com/grandyang/p/4462810.html 中的图。 阅读全文
posted @ 2018-08-20 05:24 約束の空 阅读(78) 评论(0) 推荐(0)
摘要: 二分题,第一遍写起来还是有点问题,记录一下解题思路。 二分一: 开根号,也就是找到 区间为1的low和high,那么low就是答案,因此 while (low+1<high) 来保证区间为1。 维护区间 [low, high], 但是我第一次做的时候,更新high是 high=mid-1,最后返回的 阅读全文
posted @ 2018-08-18 22:45 約束の空 阅读(85) 评论(0) 推荐(0)
摘要: 方法一:迭代 方法二:递归 25. Reverse Nodes in k-Group 递归非常好写,需要一个reverse函数,和翻转单链表写法类似,顺便复习。当然也可以迭代写,比较麻烦。 阅读全文
posted @ 2018-08-18 08:00 約束の空 阅读(109) 评论(0) 推荐(0)
摘要: 解法一:DP 遇到不会的题目,先想想暴力怎么做。对于每个元素,如果用暴力做的话,分别向左向右找最大的值,那么当前元素能装的水为 min(leftmax,rightmax)-a[i]。 leftmax和rightmax都可以记录下来。以leftmax为例,leftmax[i] = max(leftma 阅读全文
posted @ 2018-07-30 22:30 約束の空 阅读(150) 评论(0) 推荐(0)
摘要: 类似需要枚举所有解的题目,都是典型的dfs的题目。 本题要求答案里不能有重复的解,因此先将数组排序,dfs里增加一个start参数,来表明开始的下标,防止重复发生。仔细体会一下! 阅读全文
posted @ 2018-07-29 22:19 約束の空 阅读(101) 评论(0) 推荐(0)
摘要: 解法一: 类似 LeetCode 442. Find All Duplicates in an Array,由于元素是1~n,因此每个元素的值-1(映射到0~n-1)就可以直接当做下标。 解法二:Floyd Cycle Detection 由于元素都是1~n,而数组n+1个元素,因此下标为0~n,可 阅读全文
posted @ 2018-07-29 21:26 約束の空 阅读(102) 评论(0) 推荐(0)