自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 收藏
  • 关注

原创 Longest Palindromic Substring

题目分析1. 这题是要求找最长回文子序列,比较普通的做法是直接枚举中点,然后向两侧扩展,这样是O(N^2)的算法。2. 不过可以用 Manacher 算法在O(N)以内找出来,参考了这篇博客文章的题目,感觉讲得很详细了, 还有配图, 就不额外进行分析了。https://segmentfault.com/a/1190000003914228class Solution {

2017-03-01 15:55:26 163

原创 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 155

原创 Longest Substring Without Repeating Characters

题目分析1. 这道题目感觉类似于KMP的弱化版,整体思路很像KMP2. 从头到尾扫描一遍,在过程中维护一个记录了每个元素出现最后一次位置的map,以及一个记录了最后一次重复发生时后一个元素出现的位置的变量。然后可知一个合法的串的条件是串的内部不能够出现任何一个元素的重复,于是在不断向后扫描的过程中,其实就是在扩展合法串的右边界,同时根据维护的map改变左边界的位置。3. 关键是对于任何

2017-02-01 23:05:05 144

原创 Add Two Numbers

题目分析1. 给出两个队列,做高精度加法,不存在前导零。2. 这道题本身没有什么难度,不过在看过Top Solution之后学到用一个前导的指针作为开头代码能够写得更好看一些。3. 以后也要多看Top Solution,学习一些比较好的写法。题目代码 class Solution { public: ListNode* addTwoNumbers(ListNode

2017-02-01 22:33:27 181

原创 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 134

原创 课本8.3证明 吝啬SAT问题是NP完全问题

8.3 证明吝啬SAT问题是NP-完全问题。首先已知SAT问题是NP-完全问题,因此只要找到一个由SAT问题到吝啬SAT问题的规约就可以证明吝啬SAT问题也是完全-NP问题。对于任何一个给定包含n个变量的SAT的实例I(n),对于I中的任何子句(,采用子句集()代替,其有效性证明与SAT问题到3SAT问题的规约类似,可以在多项式时间内完成。在进行拆分后,每个子句都包含最多2-3个变量,将其

2017-01-17 22:03:04 421

原创 Trapping Rain Water

题目分析1. 这题本身问题并不是特别复杂,从左边扫一遍找到所有的左边最大值,再从右边扫一遍找到右边的最大值,再扫一遍算出每个单位的容积就可以了。2. 但是比较有意思的是到底需要扫几遍才能够得到正确的解,从上面可以看出最朴素的算法是扫3遍。但是显然第三遍和第二遍是可以在一起完成的,因为第一遍已经得到MaxL,第二遍的时候可以同时得到MaxR和当前点的高度H,只要用Min{MaxL, MaxR

2017-01-17 21:48:28 241

原创 Longest Consecutive Sequence

题目分析1. 题目要求找出给出的序列中的最长连续整数串,第一时间想到的做法是排序然后遍历一遍,但是这个做法显然是超时的,因为题目要求的是O(n)的时间复杂度,排序至少也要O(nlogn)的时间复杂度。2. 然后考虑怎么样可以在一趟扫描中找到合适的串,一个思路是用布尔排序,把遇到的值全部置为1,但是这个方法不仅在时间上不一定能通过,空间复杂度上也非常糟糕,先考虑有没有别的思路再考虑用这个方法

2017-01-17 21:33:54 200

原创 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 230

原创 Course Schedule/Course Schedule II

题目分析1. 这两题的问题很相似,于是放在一起做。2. 第一题可以发现是要判断有向图中是否存在有环。一开始我的思路是用BFS遍历图,然后如果一个点入队两次就说明有环,根据这个思路写了一遍运行之后很快就发现是有问题的,这种做法只可以对无向图找环,但是对于有向图来说是不成立的。一个显然的反例是 0 |   \1 ->2于是我上网找了一下有向图找环的思路。3. 一个比较通用的

2017-01-17 20:37:56 297

原创 Counting Bits

问题分析1. 这题看上去是一道比较有意思的数论题,应该是要用到位运算,所以试着做了一下。2. 给出一个整数num,要求统计0到这个整数num的二进制写法中1的个数。最容易的做法就是转换为二进制一位一位统计,这是题目中描述的O(n*sizeof(integer))的时间复杂度,又或者考虑将0到MAX_INT的1的个数前缀和存起来直接打表输出。但题目要求时间和空间都要是O(n)的级别,这两种方

2017-01-17 20:01:27 188

原创 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 388

原创 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 327

原创 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 196

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除