LeetCode
文章平均质量分 75
mahua23
这个作者很懒,什么都没留下…
展开
-
Pow(x, n) / Super Pow
题目分析 1. Pow(x, n)这题和Super Pow这题非常相似,都是要用快速幂的方法来完成的,因此放在一起来考虑。 2. Pow(x, n)这题第一次提交的时候我用的是非常简单的写法,直接把n分解成n = a0 * 2^0 + a1 * 2 ^ 1 + a2 * 2^2...an-1 * a ^ (n-1) ,然后迭代求出每个次方的值再求积,这个方法是logn的复杂度,能够满足题目的要原创 2017-01-17 10:56:39 · 332 阅读 · 0 评论 -
Add Two Numbers
题目分析 1. 给出两个队列,做高精度加法,不存在前导零。 2. 这道题本身没有什么难度,不过在看过Top Solution之后学到用一个前导的指针作为开头代码能够写得更好看一些。 3. 以后也要多看Top Solution,学习一些比较好的写法。 题目代码 class Solution { public: ListNode* addTwoNumbers(ListNode原创 2017-02-01 22:33:27 · 187 阅读 · 0 评论 -
Longest Palindromic Substring
题目分析 1. 这题是要求找最长回文子序列,比较普通的做法是直接枚举中点,然后向两侧扩展,这样是O(N^2)的算法。 2. 不过可以用 Manacher 算法在O(N)以内找出来,参考了这篇博客文章的题目,感觉讲得很详细了, 还有配图, 就不额外进行分析了。https://segmentfault.com/a/1190000003914228 class Solution {原创 2017-03-01 15:55:26 · 167 阅读 · 0 评论 -
Median of Two Sorted Arrays
题目分析 1. 题目要求在两个已经排好序的序列中找到中位数,其实可以转化成在两个已经排好序的数列中找到第 (Len / 2 + 1) 或 ((Len / 2 + 1 )大数 + (Len / 2)大数) / 2的题目,也就是在排好序的数列中找第K大数的题目。 2. 题目本身的要求不复杂,算法也比较容易得到,就是有点类似于二分查找的题目。 主要是因为一个结论 数列A,B,找第 k原创 2017-03-01 10:53:18 · 162 阅读 · 0 评论 -
Ones and Zeroes
题目分析 1. 这题是有两个背包的背包问题变形 2. 直接在原来的背包问题上增加一维,就可以套用原有的状态转移方程解答。 题目代码 class Solution { public: int findMaxForm(vector& strs, int m, int n) { vector> f(m + 1, vector(n + 1, 0)); for (int i =原创 2017-01-17 22:10:51 · 139 阅读 · 0 评论 -
Trapping Rain Water
题目分析 1. 这题本身问题并不是特别复杂,从左边扫一遍找到所有的左边最大值,再从右边扫一遍找到右边的最大值,再扫一遍算出每个单位的容积就可以了。 2. 但是比较有意思的是到底需要扫几遍才能够得到正确的解,从上面可以看出最朴素的算法是扫3遍。但是显然第三遍和第二遍是可以在一起完成的,因为第一遍已经得到MaxL,第二遍的时候可以同时得到MaxR和当前点的高度H,只要用Min{MaxL, MaxR原创 2017-01-17 21:48:28 · 251 阅读 · 0 评论 -
Longest Consecutive Sequence
题目分析 1. 题目要求找出给出的序列中的最长连续整数串,第一时间想到的做法是排序然后遍历一遍,但是这个做法显然是超时的,因为题目要求的是O(n)的时间复杂度,排序至少也要O(nlogn)的时间复杂度。 2. 然后考虑怎么样可以在一趟扫描中找到合适的串,一个思路是用布尔排序,把遇到的值全部置为1,但是这个方法不仅在时间上不一定能通过,空间复杂度上也非常糟糕,先考虑有没有别的思路再考虑用这个方法原创 2017-01-17 21:33:54 · 203 阅读 · 0 评论 -
Jump Game/Jump Game II
题目分析 1. Jump Game I和 Jump Game II放在一起做。 2. 一开始还考虑是不是要用动态规划来解答,因为看上去非常像是要动态规划的,但是后来考虑觉得用贪心的思路来做就可以了。我觉得关键是这题走到k之后从[k, k + w[k]]都是可行的路径了,因此只需要一直不断向前贪心就可以了,但是如果考虑问题变成从[k + min[k], k + max[k]]即中间有可能存在空隙原创 2017-01-17 21:19:22 · 238 阅读 · 0 评论 -
Course Schedule/Course Schedule II
题目分析 1. 这两题的问题很相似,于是放在一起做。 2. 第一题可以发现是要判断有向图中是否存在有环。一开始我的思路是用BFS遍历图,然后如果一个点入队两次就说明有环,根据这个思路写了一遍运行之后很快就发现是有问题的,这种做法只可以对无向图找环,但是对于有向图来说是不成立的。一个显然的反例是 0 | \ 1 ->2 于是我上网找了一下有向图找环的思路。 3. 一个比较通用的原创 2017-01-17 20:37:56 · 298 阅读 · 0 评论 -
Counting Bits
问题分析 1. 这题看上去是一道比较有意思的数论题,应该是要用到位运算,所以试着做了一下。 2. 给出一个整数num,要求统计0到这个整数num的二进制写法中1的个数。最容易的做法就是转换为二进制一位一位统计,这是题目中描述的O(n*sizeof(integer))的时间复杂度,又或者考虑将0到MAX_INT的1的个数前缀和存起来直接打表输出。但题目要求时间和空间都要是O(n)的级别,这两种方原创 2017-01-17 20:01:27 · 193 阅读 · 0 评论 -
Word Ladder/ Word Ladder II
题目分析 1. Word Ladder和Word Ladder II两题是连续的,基本是同一个问题的两个难度,因此放在一起做了。 2. Word Ladder是要找出一条从Start Word 到 End Word的最短路径,一个比较简单的想法就是建立一张图,描述每个在字典中的词之间的可达性,只有任意两个词间有且仅有一个字母不同的时候是直接可达的,然后用BFS的方式去找到Start Word和原创 2017-01-17 11:25:07 · 410 阅读 · 0 评论 -
House Robber I/II/III
题目分析: 1. House Robber的三道题基本上都大同小异,因此是一次连续做完的。 2. 题目主要的类型是类似动态规划中的背包问题,带有的限制是不能够连续取数,但没有重量的限制。三道题的区别是House Robber I是在普通的线性序列上取数,House Robber II是在环上取数,House Robber III是在二叉树上取数。三道问题可以用类似的思路解决。 3. 首先考虑原创 2017-01-17 10:29:15 · 208 阅读 · 0 评论 -
Longest Substring Without Repeating Characters
题目分析 1. 这道题目感觉类似于KMP的弱化版,整体思路很像KMP 2. 从头到尾扫描一遍,在过程中维护一个记录了每个元素出现最后一次位置的map,以及一个记录了最后一次重复发生时后一个元素出现的位置的变量。然后可知一个合法的串的条件是串的内部不能够出现任何一个元素的重复,于是在不断向后扫描的过程中,其实就是在扩展合法串的右边界,同时根据维护的map改变左边界的位置。 3. 关键是对于任何原创 2017-02-01 23:05:05 · 148 阅读 · 0 评论