随笔分类 -  LeetCode

摘要:https://oj.leetcode.com/problems/jump-game-ii/这道题要是直接DP就跪了。将其当成一个图论问题,则每个i节点到其随后的A[i]个节点都有一条边。BFS搜索并标记能够避免计算后面又到达的一些顶点因而是O(n)的算法。BFS还需要针对性的少于优化,首先扩展新结... 阅读全文
posted @ 2014-10-10 01:18 zombies 阅读(290) 评论(0) 推荐(0)
摘要:https://oj.leetcode.com/problems/recover-binary-search-tree/思路是首先按中序把节点序列打到数组里。然后扫描数组看是哪两个数需要交换。考虑ai和aj是需要交换的两个值,其中i v; void InOrder(TreeNode *root... 阅读全文
posted @ 2014-10-09 21:40 zombies 阅读(147) 评论(0) 推荐(0)
摘要:https://oj.leetcode.com/problems/add-two-numbers/跟大整数类似的链表操作。注意最后还有进位时需要再加入一个结点。/** * Definition for singly-linked list. * struct ListNode { * int... 阅读全文
posted @ 2014-10-09 16:23 zombies 阅读(159) 评论(0) 推荐(0)
摘要:https://oj.leetcode.com/problems/clone-graph/克隆一个可能有环的无向图。递归的重构出每个顶点即可。虽然有环,但是每个结点的label提供了该结点的唯一标示。可以使用一个map记录该标识下结点的地址。/** * Definition for undirect... 阅读全文
posted @ 2014-10-09 16:04 zombies 阅读(284) 评论(0) 推荐(0)
摘要:https://oj.leetcode.com/problems/valid-palindrome/水题。需要注意'a'>'A'。判断范围时弄错了一次。class Solution {public: int n,m; bool Check(char ch){ if (ch>='0' && ch='... 阅读全文
posted @ 2014-10-09 15:18 zombies 阅读(130) 评论(0) 推荐(0)
摘要:https://oj.leetcode.com/problems/sqrtx/二分搜索。需要注意每次改变边界时l=mi-1,r=mi+1,否则会死循环。另外可能会有整数溢出的情况,使用long long即可解决。class Solution {public: int sqrt(int x) {... 阅读全文
posted @ 2014-10-09 09:58 zombies 阅读(180) 评论(0) 推荐(0)
摘要:https://oj.leetcode.com/problems/longest-substring-without-repeating-characters/跟“Minimum Window Substring”差不多的一道题。如果往LCS方向思考就走弯路了。正解还是滑动窗口。维护一个到当前位置的... 阅读全文
posted @ 2014-10-09 02:15 zombies 阅读(159) 评论(0) 推荐(0)
摘要:https://oj.leetcode.com/problems/permutation-sequence/一道简单题目。但是要一次写出bug-free的代码还是挺困难。子问题是固定了前i个数,对第i+1数,要求从他开始往后的第k个数即可。第i+1个数由以下两个因素确定:1)[i+2,n)这些数字共... 阅读全文
posted @ 2014-10-08 23:23 zombies 阅读(155) 评论(0) 推荐(0)
摘要:https://oj.leetcode.com/problems/rotate-list/这道题目首先要理解什么是"rotate to the right y k",题目的那个例子看起来像是另后k个结点连接到链表的头上。当k>n时,此题被翻译为按照从右数第k个元素进行旋转,这个就很难理解了。这种情况... 阅读全文
posted @ 2014-10-08 21:15 zombies 阅读(178) 评论(0) 推荐(0)
摘要:https://oj.leetcode.com/problems/implement-strstr/简单的调用string::find就可以解决。高级的可以自己实现KMP或者移动哈希算法。string::find返回一个size_t,如果没找到其返回值为-1(string::npos)。class ... 阅读全文
posted @ 2014-10-08 19:41 zombies 阅读(152) 评论(0) 推荐(0)
摘要:https://oj.leetcode.com/problems/maximal-rectangle/一堆0,1矩阵中计算出由1组成的长方形的最大面积。使用了直方图求最大面积的算法。枚举每一行p,然后在将一行上的所有列看做朝i>p方向出发的直方图,然后在这个直方图上用栈存储递增序列的那个一次遍历算法... 阅读全文
posted @ 2014-10-08 19:35 zombies 阅读(375) 评论(0) 推荐(0)
摘要:https://oj.leetcode.com/problems/palindrome-partitioning/这个题目很简单。递归搜索+枚举就能过,只要注意递归到0时,压入一个空数组即可。class Solution {public: int n; string s; bool... 阅读全文
posted @ 2014-10-08 17:44 zombies 阅读(118) 评论(0) 推荐(0)
摘要:https://oj.leetcode.com/problems/palindrome-partitioning-ii/普通的DP很容易想到。但是复杂度为n^3会超时。一个重要的优化是使用一个数组pm[i][j]来记录[i,j)这段子串是否为回文。这个pm不需要预计算,通过调整遍历f(i)之前子串的... 阅读全文
posted @ 2014-10-08 17:38 zombies 阅读(115) 评论(0) 推荐(0)
摘要:https://oj.leetcode.com/problems/merge-k-sorted-lists/自底向上的归并排序,用一个step控制需要合并次数,每次都把相邻的两个表合并成一个大表存在第一个表原先所在的位置上。然后step扩大两倍。需要注意的是最后一个表如果i+step>n-1,则说明... 阅读全文
posted @ 2014-10-08 16:35 zombies 阅读(167) 评论(0) 推荐(0)
摘要:https://oj.leetcode.com/problems/largest-rectangle-in-histogram/这道题的O(n)算法比较巧妙。基本思想是考虑某一个高度h[i],以这个高度为最高点的最大矩形两个边界高度l[i]和r[i]满足以下条件:1)h[l[i]]h[st.top(... 阅读全文
posted @ 2014-10-08 14:08 zombies 阅读(138) 评论(0) 推荐(0)
摘要:https://oj.leetcode.com/problems/word-break/水题。简单DP。class Solution {public: int n,m; bool wordBreak(string s, unordered_set &dict) { n=s.... 阅读全文
posted @ 2014-10-07 18:00 zombies 阅读(103) 评论(0) 推荐(0)
摘要:https://oj.leetcode.com/problems/merge-intervals/水题。需要注意sort的用法可能在平台上不好使。/** * Definition for an interval. * struct Interval { * int start; * ... 阅读全文
posted @ 2014-10-07 17:50 zombies 阅读(132) 评论(0) 推荐(0)
摘要:https://oj.leetcode.com/problems/multiply-strings/实现两个函数:1)字符与一个串的乘法。2)两个串的加法。再考虑一些边界情况即可。class Solution {public: int n,m; string Mul(char ch,string &... 阅读全文
posted @ 2014-10-06 17:41 zombies 阅读(184) 评论(0) 推荐(0)
摘要:https://oj.leetcode.com/problems/insert-interval/一道比较简单的题。主要就是扫描一段数组,看哪些时间段与目标时间段相交,相交的那些用来更新目标时间段。在相交结束时插入目标时间段。需要注意的是目标时间出现在两个时间段中间的情况,哪个都没有相交但是也需要插... 阅读全文
posted @ 2014-10-06 17:06 zombies 阅读(246) 评论(0) 推荐(0)
摘要:https://oj.leetcode.com/problems/sort-list/实现相当麻烦的一道题。主要思想是从中间分开,然后就地的归并排序两段子链表。比较麻烦的地方有三处:1)注意子链表排序后,首尾都发生了变化,所以在排序后需要返回新的首尾。2) Merge函数内部也需要调整外面首尾的指针... 阅读全文
posted @ 2014-10-06 15:59 zombies 阅读(173) 评论(0) 推荐(0)