随笔分类 -  LeetCode

摘要:https://oj.leetcode.com/problems/spiral-matrix/题目没难度,就是循环把每一层的螺旋打印出来即可。需要注意每次螺旋大小缩小2,计算相应的位置并考虑左边界等于右边界的情况。class Solution {public: int n,m; int cn,cm;... 阅读全文
posted @ 2014-10-06 02:18 zombies 阅读(142) 评论(0) 推荐(0)
摘要:https://oj.leetcode.com/problems/restore-ip-addresses/跟Word Break II一个尿性的DP题目。如果直接使用vector dp[][]来进行DP会引入很大量的中间结果影响效率。因此可以先用bool dp[][]来计算出那些是合法的。然后D... 阅读全文
posted @ 2014-10-05 23:38 zombies 阅读(340) 评论(0) 推荐(0)
摘要:https://oj.leetcode.com/problems/reorder-list/需要一个栈以每次取得链表尾部的结点。有了这个栈以后,这个问题就是一个链表操作问题。对于链表的操作,需要在纸上画好每次需要调整哪些结点以及其next指针。并且一定要注意边界条件。这个题目需要注意的是栈顶元素被重... 阅读全文
posted @ 2014-10-05 22:41 zombies 阅读(160) 评论(0) 推荐(0)
摘要:https://oj.leetcode.com/problems/binary-tree-maximum-path-sum/求二叉树的连续路径加和的最大值。这道题会被坑的地方就是认为结点值都大于0。需要考虑结点值小于0的情况。考虑包含结点u的所有路径的最大值。可以看出这个最大路径有三种可能:1)只含... 阅读全文
posted @ 2014-10-05 21:51 zombies 阅读(416) 评论(0) 推荐(0)
摘要:https://oj.leetcode.com/problems/regular-expression-matching/递归的方法超时了。跟通配符的那道题类似,使用DP的方法能够AC,而且这题没有BT数据的问题。首先定义递推:f(i,j):前i个s和前j个p是否能够匹配,这里考察的元素要比通配符复... 阅读全文
posted @ 2014-10-05 18:11 zombies 阅读(428) 评论(0) 推荐(0)
摘要:https://oj.leetcode.com/problems/simplify-path/这道题很简答。就是用栈把有效目录名存起来,然后根据后面解析出的..进行出栈操作。主要麻烦在于解析路径,解析从p开始的下一个目录名,我的做法如下:1)首先跳过所有开头的'/',这里不小心写了一个死循环,距离b... 阅读全文
posted @ 2014-10-05 17:16 zombies 阅读(145) 评论(0) 推荐(0)
摘要:https://oj.leetcode.com/problems/evaluate-reverse-polish-notation/当年上课的例子。就是栈的应用,每次遇到操作符就把栈的头两个元素与操作符进行计算,再将结果压栈,如果逆波兰式没有问题,那么最后栈里应该只剩一个元素。需要注意的有两个地方:... 阅读全文
posted @ 2014-10-04 22:09 zombies 阅读(137) 评论(0) 推荐(0)
摘要:https://oj.leetcode.com/problems/longest-valid-parentheses/这题一直没有把问题想清楚,浪费了不少时间。最终解法如下:1)第一次遍历所有元素,用一个栈记录还没有匹配的"("括号的位置,在遇到")"括号匹配时出栈一个元素。2)用一个bool 数组... 阅读全文
posted @ 2014-10-04 21:21 zombies 阅读(208) 评论(0) 推荐(0)
摘要:https://oj.leetcode.com/problems/interleaving-string/这种字符串的题目已经把DP或MEMO写在了脸上。这题容易想到O(m1*m2*n)的DP方案,但这种方法有很多空间和时间的浪费。需要注意到我们在递推的比较过程中如果知道s1,s2上的指针p,q的情... 阅读全文
posted @ 2014-10-04 17:01 zombies 阅读(175) 评论(0) 推荐(0)
摘要:https://oj.leetcode.com/problems/two-sum/这道题我的方案是O(nlogn)的,首先将数组和其序号放进pair中,然后排序这个pair数组。之后就是枚举第一个数,二分查找第二个数。我使用了lower_bound:1)可以在pair数组中查找pair,这时只需要随... 阅读全文
posted @ 2014-10-04 15:08 zombies 阅读(223) 评论(0) 推荐(0)
摘要:https://oj.leetcode.com/problems/word-ladder/Word Ladder II的简化版。这个跟II比起来只需要搜索出来最短路径即可。我使用的方法还是BFS,用按层次搜索的层次来当做每个结点的距离。从start出发,不断修改单词进行扩展结点。当搜索到end时就停... 阅读全文
posted @ 2014-10-04 14:19 zombies 阅读(269) 评论(0) 推荐(0)
摘要:https://oj.leetcode.com/problems/maximum-depth-of-binary-tree/求最大深度。需要考虑root==NULL的情况,所以可以递归到NULL节点上。 阅读全文
posted @ 2014-10-04 00:36 zombies 阅读(79) 评论(0) 推荐(0)
摘要:https://oj.leetcode.com/problems/minimum-window-substring/线性复杂度的限制下,考虑使用滑动窗口法。这个方法的思路就是维持一个窗口,窗口向右边界扩张以满足限制条件。窗口左边界收缩以尽量使其最小。注意这个题目可能是一个典型的滑动窗口方法的实现。外... 阅读全文
posted @ 2014-10-04 00:25 zombies 阅读(696) 评论(0) 推荐(0)
摘要:https://oj.leetcode.com/problems/median-of-two-sorted-arrays/合并两个有序表,MergeSort的一部分的那个算法。幸运的是stl提供了merge函数。复习一下这个函数的签名:merge(first1,end1,first2,end2,de... 阅读全文
posted @ 2014-10-03 19:38 zombies 阅读(155) 评论(0) 推荐(0)
摘要:https://oj.leetcode.com/problems/divide-two-integers/不使用乘除实现除法。那么能够使用的就是+-和移位运算。首先检查边界和符号。如果用一直减的方法实现,会有可能除数很小导致超时。所以必须借助移位运算减少减法操作数目。我的想法是,首先通过被除数右移计... 阅读全文
posted @ 2014-10-03 17:41 zombies 阅读(209) 评论(0) 推荐(0)
摘要:https://oj.leetcode.com/problems/maximum-product-subarray/题目非常简单,就是要AC代码量不小,需要保证一次性正确率很难。考虑一个数组最大乘积可能的几种情况:1)0,数组中有0,且其他部分都乘积比0小。这种情况可以把问题分解成一系列0隔开的子数... 阅读全文
posted @ 2014-10-03 15:49 zombies 阅读(239) 评论(0) 推荐(0)
摘要:https://oj.leetcode.com/problems/word-break-ii/首先这个问题显然是可以利用以前搜索的结果,所以可以看出是一个具有DP性质的递推关系的题目。f(int p):后n-p个单词已经被断句的条件下,前p个所有组成的断句结果都有哪些,我们还需要一个数组dpf[],... 阅读全文
posted @ 2014-10-03 14:51 zombies 阅读(235) 评论(0) 推荐(0)
摘要:https://oj.leetcode.com/problems/decode-ways/一个DP计数的问题。解决思路就是假定后n-p个数的译码方式确定了,求前p个数的译码方式。这样对s[p-1],s[p-2]进行合理性检查并决定能否规约到子问题即可。我用了Memo的方法,DP也是一样的。class... 阅读全文
posted @ 2014-10-03 10:54 zombies 阅读(172) 评论(0) 推荐(0)
摘要:https://oj.leetcode.com/problems/string-to-integer-atoi/这道题可以看做valid number的变种。首先按照正则表达式^\s*[+,-]?[0-9]+*$构造出转换表。然后根据输入进行状态机转换。在状态转换过程中将数字和符号分别存储起来,最后... 阅读全文
posted @ 2014-10-03 10:35 zombies 阅读(347) 评论(0) 推荐(0)
摘要:https://oj.leetcode.com/problems/surrounded-regions/很简单的一道图论题。BFS或者DFS都可解。对不同的连通域使用一个color每次进行标记扩散,再根据是否遍历过程遇到了边界点来判断是否为sorround。在不使用额外内存的限制下,通过修改boar... 阅读全文
posted @ 2014-10-03 01:36 zombies 阅读(214) 评论(0) 推荐(0)