10 2014 档案
摘要:http://community.topcoder.com/stat?c=problem_statement&pm=13393&rd=16062这道题考察对解的可能的分析。一旦想到将n/2与n/2+1行操作为不同颜色就能得到满足条件的解这个结论,这道题目就非常简单了。最差的情况2次操作可以完成,所以...
阅读全文
摘要:http://community.topcoder.com/stat?c=problem_statement&pm=13389&rd=16075比正常的简单题多了50分。说明比平时的简单题要难一些。考虑输入规模,可以看出枚举并判断所有子序列是可行的。那么关键就是如何判断一个子序列是合法的。先观察第一...
阅读全文
摘要:http://community.topcoder.com/stat?c=problem_statement&pm=13455&rd=16077这道题目很容易往贪心的方向思考。其实很难找到一个贪心策略正确的求出最少的>=K的顾客数目。考虑到答案是求顾客的数目,而这个数目的范围是[0,n),并且n并不...
阅读全文
摘要:https://oj.leetcode.com/problems/find-minimum-in-rotated-sorted-array-ii/允许重复,也就意味着会有a[l]==a[r],以及a[mid]==a[r]的情况出现。后者比较好办,从坐标图中看出直接r=mid即可。前者会有一个问题是当...
阅读全文
摘要:首先容易想到的是把那些已知的轮次尽可能的赢下来。对于已知但赢不下来的,可以放上当前最小的牌,这样能使期望最大。然后就得到了我们当前的一手牌,和他们当前的一手牌。在已知牌的数字,但是不知牌的顺序的情况下,求得分的期望。一开始试图用递归的方法去做,发现没办法很好的归纳出已经用了那些牌还剩那些牌。最后猜测...
阅读全文
摘要:http://community.topcoder.com/stat?c=problem_statement&pm=13234&rd=16076首先需要想得到怎样的一组跳跃序列能够到达x。通过思考可以知道,当序列在沿到目标点的路线上走时,其所能走到的最长和最短的点覆盖目标点,就一定能够通过旋转这些铰...
阅读全文
摘要:http://community.topcoder.com/stat?c=problem_statement&pm=13485&rd=16078很容易枚举,令(p,q)表示分别以其为结尾的相似的折线。则可以从p-1和q-1开始向前搜索判断这个子串是否符合题目要求。然后计算出折线的长度并统计出最大的即...
阅读全文
摘要:http://community.topcoder.com/stat?c=problem_statement&pm=13497&rd=16079一道简单题。首先能估算出,枚举所有分割的可能是C(n,2)*C(m,2)=O(m^2*n^2)。但是如果已知分割后再遍历所有字符则会超时。所以这道题的重点就...
阅读全文
摘要:玩一个游戏,一开始有X元,共M轮赌博。每轮可以将任意部分的前当做赌注(小数也可以)。每一轮都有概率P会赢,赢了赌注就翻倍,输了赌注就没了。如果最终持有100000元以上就算赢了。求当采取最优策略时,起始有X元时,赢的概率是多少?首先要从M-1轮开始前开始推理,有三档可能,[0,50000)时即使翻倍...
阅读全文
摘要:https://oj.leetcode.com/problems/rotate-image/90度顺时针旋转一个矩阵。很容易联想到矩阵转置。但是矩阵转置是将第i行变成了第i列。而这个旋转的结果是要使第i行变成第n-i列。所以在转置之后再将每一列调整到其应该在的地方即可。还有一种方法是注意到每个元素的...
阅读全文
摘要:https://oj.leetcode.com/problems/search-in-rotated-sorted-array-ii/当允许相等时,就要考虑各种边界条件。我的策略是把每个>,l){ int mid=(l+r)/2; if (x==A[mid...
阅读全文
摘要:https://oj.leetcode.com/problems/remove-duplicates-from-sorted-array/用一个cnt记录不重复的部分,后面每遇到不重复的cnt++即可。class Solution {public: int removeDuplicates(i...
阅读全文
摘要:https://oj.leetcode.com/problems/linked-list-cycle-ii/在判断成环问题的基础上需要做一些推理才能得到简洁的解法。首先,假设环的起点距离head有m步。则当p到达起点时,q的位置在环上的m%n处。那么p,q相遇的位置相对于起点就是(n-m%n),在这...
阅读全文
摘要:https://oj.leetcode.com/problems/unique-binary-search-trees-ii/跟二叉树个数计数的那道题类似,不同的是需要把所有的可能都返回,并整合成结果。/** * Definition for binary tree * struct TreeNod...
阅读全文
摘要:https://oj.leetcode.com/problems/3sum-closest/和3sum类似。不同的是这次需要逼近一个值,实际上跟相等类似,用l和r指针不断移动,然后反复取最小即可。class Solution {public: int n,m; int threeSumC...
阅读全文
摘要:https://oj.leetcode.com/problems/powx-n/其实是很简单的递归就能解。每次将其降低到n/2即可。需要注意各种边界条件,包括n为最小的负数的情况。class Solution {public: double pow(double x, int n) { ...
阅读全文
摘要:https://oj.leetcode.com/problems/gas-station/计算每个加油站的加油差diff[]。得到一个数组。从贪心的角度来说,如果我们找到一个最大子串,那么从他的起点l开始走,能够连续一直走并且累积最大量的汽油。一个猜想是:如果这些汽油不足以走完全程,那么无论从哪里都...
阅读全文
摘要:https://oj.leetcode.com/problems/maximum-subarray/一直累加子串并求最大。当子串小于0时就抛弃掉,这样总能找到最大的那个子串和。class Solution {public: int maxSubArray(int A[], int n) { ...
阅读全文
摘要:https://oj.leetcode.com/problems/distinct-subsequences/首先要理解题目:count the number of distinct subsequences ofTinS.意思是,数出T在S的唯一子序列的个数。也就是有多少个S的子序列是T。子序列可...
阅读全文
摘要:https://oj.leetcode.com/problems/combination-sum-ii/一道DFS搜索的题目,需要注意去除重复。可以使用一个map记录每个数字重复的次数。然后每次递归时-1,在递归退回时在加回来。class Solution {public: int n,m; ...
阅读全文
摘要:https://oj.leetcode.com/problems/anagrams/这道题考你知不知道什么是Anagrams:字母一样,顺序不一样的单词,就是一组anagrams。也就是说,我们需要找出一些组的单词,每组的单词具有同样的字母,并将该组所有的单词都加入进来。所以用一个map标记第一个出...
阅读全文
摘要:https://oj.leetcode.com/problems/scramble-string/这道题要想办法将其考虑为动态规划,否则会超时。需要想到的一点是长度比较小的连续子串可以作为长度比较长的连续子串是否是合法乱序的子问题。然后就能定义出递推:f(p,q,l) :从s1的p和s2的q字符开始...
阅读全文
摘要:https://oj.leetcode.com/problems/longest-palindromic-substring/这道题O(n^2)的DP的解法会超时。大致思路就是从0-n计算子串的最大子串,并利用ispar[p][q]数组记录[p,q]是否是回文以避免每次判断子串是否是回文。class...
阅读全文
摘要:https://oj.leetcode.com/problems/candy/两遍扫面,第一遍保证ci与ci-1的关系能够保证满足分数大小。第二遍保证ci与ci+1关系能够保证。注意顺序一定要是比较当前与上次更新过的结果。不能由于本次的更新影响以后不会扫描的结果。class Solution {pu...
阅读全文
摘要:https://oj.leetcode.com/problems/3sum/先排序。然后枚举i属于[0,n-3]的这些数作为三元组的第一个数,令x=0-a[i]。这样就变成从[i+1,n)找出两个数加起来和等于x。由于这些数是有序数,可以使用l,r指针对在两侧向中间逼近。这利用了一个事实:如果al+...
阅读全文
摘要:https://oj.leetcode.com/problems/roman-to-integer/将罗马数字字符串转换为十进制数字。首先将罗马数字每一位对应的数字列出来。然后每次搜索当前后面一部分是否等于其中一个罗马数字。找到匹配的最长的那个罗马数字将其匹配掉即可。class Solution {...
阅读全文
摘要:https://oj.leetcode.com/problems/merge-sorted-array/归并排序的一步操作,需要事先把A[]的元素移到数组末端,前段空出来填充结果。需要注意的是如果从0~m的转移会在n比较小的时候有问题。所以要从m~0转移。使用memcpy在GCC下就是从0~m开始转...
阅读全文
摘要:https://oj.leetcode.com/problems/populating-next-right-pointers-in-each-node/构造一个按深度索引的数组,存储的当前遍历的结点在这一层的最右边的结点。由前序遍历的特点可知同一层左边的儿子先被访问,过一段时间后会访问右边的儿子。...
阅读全文
摘要:https://oj.leetcode.com/problems/pascals-triangle-ii/类似DP的迭代方法,只需注意数组大小分配即可。class Solution {public: int n,m; vector c[2]; vector getRow(int r...
阅读全文
摘要:https://oj.leetcode.com/problems/remove-nth-node-from-end-of-list/一道很典型的题。使用两个距离为n的指针,往后移动到后面遇到尾端。第一个指针指向结点就是待删除结点。/** * Definition for singly-linked ...
阅读全文
摘要:https://oj.leetcode.com/problems/trapping-rain-water/这道题使用单调队列能够O(n)时间解决。维护一个降序排列的单调队列。如果Ai>A[que.front]就说明能够使用que.front作为顶部计算一次积水。当从0-n时,须注意队列中还有元素。需...
阅读全文
摘要:https://oj.leetcode.com/problems/search-in-rotated-sorted-array/一个被旋转的数组,要求二分搜索查询一个数。修改二分搜索可以完成。注意可以通过A[l]A[r]时,中间有一个间断点。可以通过A[mid]>A[r]来判断中点与旋转中心的位置关...
阅读全文
摘要:https://oj.leetcode.com/problems/flatten-binary-tree-to-linked-list/实现一个返回值为子树r展开后最右边节点的函数。然后使用这个函数适当的将展开后的右子树移到左子树的尾部,再将left指针置为0即可。/** * Definition ...
阅读全文
摘要:https://oj.leetcode.com/problems/search-for-a-range/题目原意应该为使用二分搜索。搜lower_bound时直到a[l]=x时停止。搜upper_bound时直到a[r]=x时停止。typedef pair scpair;class Solution...
阅读全文
摘要:https://oj.leetcode.com/problems/subsets-ii/预处理一下记录每个数字以及其出现的次数。然后在DFS时枚举出现次数即可。class Solution {public: int n,m; vector s; vector d; vec...
阅读全文
摘要:https://oj.leetcode.com/problems/partition-list/首先找到第一个大于x的节点q,并记录前继lq。然后从q->next遍历其,将后面小于x的节点逐个插入lq与q之间,并将lq更新为新插入节点。/** * Definition for singly-link...
阅读全文
摘要:https://oj.leetcode.com/problems/triangle/类似用DP的方法迭代以及节省空间的算法。从三角形底部将最小累加到上层即可。 1 class Solution { 2 public: 3 int n; 4 vector > tr; 5 int...
阅读全文
摘要:https://oj.leetcode.com/problems/combination-sum/比较节省空间的方法是DFS回溯。犯了个小错忘记先排序。class Solution {public: int n,m; vector ca; vector > tot; vec...
阅读全文
摘要:https://oj.leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/跟后序中序类似。/** * Definition for binary tree * struct TreeNode ...
阅读全文
摘要:https://oj.leetcode.com/problems/construct-binary-tree-from-inorder-and-postorder-traversal/递归,每次找后序的最后一个元素,然后按中序将其分为两部分即可。/** * Definition for binary...
阅读全文
摘要:https://oj.leetcode.com/problems/binary-tree-zigzag-level-order-traversal/水题,在DFS时加入一个level参数识别层数,然后将每层的结点都压入相应的数组中。/** * Definition for binary tree *...
阅读全文
摘要:https://oj.leetcode.com/problems/letter-combinations-of-a-phone-number/简单DFS题。实际上只会出现[2,9]的数字。int t[11]={0,0,0,3,6,9,12,15,19,22,26};class Solution {p...
阅读全文
摘要:https://oj.leetcode.com/problems/reverse-linked-list-ii/跟链表按组翻转类似,实现一个能够翻转区间的函数。然后找出这个区间并翻转即可。注意不要丢失链表头。/** * Definition for singly-linked list. * str...
阅读全文
摘要:https://oj.leetcode.com/problems/n-queens/回溯法的课本例题。注意有递归非递归两种实现。class Solution {public: int n,m; vector c; vector > tot; bool Check(int p...
阅读全文
摘要:https://oj.leetcode.com/problems/validate-binary-search-tree/递归判断二叉树是否为合法二查搜索树的题目。也可以中序打印出来然后扫描。注意判断BST是否合法条件是当前节点的值大于一切左边的+小于一切右边的。也就是说仅仅判断他和两个儿子的关系是...
阅读全文
摘要:https://oj.leetcode.com/problems/edit-distance/DP例题。注意数组不要越界即可。const int INF=9999;class Solution {public: int n,m; vector > dp; string s1,s2;...
阅读全文
摘要:https://oj.leetcode.com/problems/insertion-sort-list/插入排序为假设[0,i)已经为有序数组,下一步从[i,n)找最小的元素交换到i处。用指针模拟这个过程即可。就是操作有些麻烦。每次[head,p)为已经有序的数组,下次从[p,tail]找出最小的...
阅读全文
摘要:https://oj.leetcode.com/problems/reverse-nodes-in-k-group/使用一个计数器cn,当cn%k=0时进行翻转,翻转时需要把这组链表前面的一个节点的next值也做相应的设置。并且翻转后最后一个节点的next值也需要设置。考虑这些之后小心操作链表即可,...
阅读全文
摘要:https://oj.leetcode.com/problems/next-permutation/我这个解法并不很好,是O(n^2),这个在STL实现里应该是O(n)的。不过我的方法比较简单。想法是首先需要找到一个left边界l,这个边界需要跟其后面的某个元素r交换使序列增大。然后在l前面的部分不...
阅读全文
摘要:https://oj.leetcode.com/problems/remove-duplicates-from-sorted-list-ii/链表操作的题目。基本思想是维护lp,p,q三个指针,主要麻烦在于处理边界条件。/** * Definition for singly-linked list....
阅读全文
摘要:https://oj.leetcode.com/problems/jump-game-ii/这道题要是直接DP就跪了。将其当成一个图论问题,则每个i节点到其随后的A[i]个节点都有一条边。BFS搜索并标记能够避免计算后面又到达的一些顶点因而是O(n)的算法。BFS还需要针对性的少于优化,首先扩展新结...
阅读全文
摘要:https://oj.leetcode.com/problems/recover-binary-search-tree/思路是首先按中序把节点序列打到数组里。然后扫描数组看是哪两个数需要交换。考虑ai和aj是需要交换的两个值,其中i v; void InOrder(TreeNode *root...
阅读全文
摘要:https://oj.leetcode.com/problems/add-two-numbers/跟大整数类似的链表操作。注意最后还有进位时需要再加入一个结点。/** * Definition for singly-linked list. * struct ListNode { * int...
阅读全文
摘要:https://oj.leetcode.com/problems/clone-graph/克隆一个可能有环的无向图。递归的重构出每个顶点即可。虽然有环,但是每个结点的label提供了该结点的唯一标示。可以使用一个map记录该标识下结点的地址。/** * Definition for undirect...
阅读全文
摘要:https://oj.leetcode.com/problems/valid-palindrome/水题。需要注意'a'>'A'。判断范围时弄错了一次。class Solution {public: int n,m; bool Check(char ch){ if (ch>='0' && ch='...
阅读全文
摘要:https://oj.leetcode.com/problems/sqrtx/二分搜索。需要注意每次改变边界时l=mi-1,r=mi+1,否则会死循环。另外可能会有整数溢出的情况,使用long long即可解决。class Solution {public: int sqrt(int x) {...
阅读全文
摘要:https://oj.leetcode.com/problems/longest-substring-without-repeating-characters/跟“Minimum Window Substring”差不多的一道题。如果往LCS方向思考就走弯路了。正解还是滑动窗口。维护一个到当前位置的...
阅读全文
摘要:https://oj.leetcode.com/problems/permutation-sequence/一道简单题目。但是要一次写出bug-free的代码还是挺困难。子问题是固定了前i个数,对第i+1数,要求从他开始往后的第k个数即可。第i+1个数由以下两个因素确定:1)[i+2,n)这些数字共...
阅读全文
摘要:https://oj.leetcode.com/problems/rotate-list/这道题目首先要理解什么是"rotate to the right y k",题目的那个例子看起来像是另后k个结点连接到链表的头上。当k>n时,此题被翻译为按照从右数第k个元素进行旋转,这个就很难理解了。这种情况...
阅读全文
摘要:https://oj.leetcode.com/problems/implement-strstr/简单的调用string::find就可以解决。高级的可以自己实现KMP或者移动哈希算法。string::find返回一个size_t,如果没找到其返回值为-1(string::npos)。class ...
阅读全文
摘要:https://oj.leetcode.com/problems/maximal-rectangle/一堆0,1矩阵中计算出由1组成的长方形的最大面积。使用了直方图求最大面积的算法。枚举每一行p,然后在将一行上的所有列看做朝i>p方向出发的直方图,然后在这个直方图上用栈存储递增序列的那个一次遍历算法...
阅读全文
摘要:https://oj.leetcode.com/problems/palindrome-partitioning/这个题目很简单。递归搜索+枚举就能过,只要注意递归到0时,压入一个空数组即可。class Solution {public: int n; string s; bool...
阅读全文
摘要:https://oj.leetcode.com/problems/palindrome-partitioning-ii/普通的DP很容易想到。但是复杂度为n^3会超时。一个重要的优化是使用一个数组pm[i][j]来记录[i,j)这段子串是否为回文。这个pm不需要预计算,通过调整遍历f(i)之前子串的...
阅读全文
摘要:https://oj.leetcode.com/problems/merge-k-sorted-lists/自底向上的归并排序,用一个step控制需要合并次数,每次都把相邻的两个表合并成一个大表存在第一个表原先所在的位置上。然后step扩大两倍。需要注意的是最后一个表如果i+step>n-1,则说明...
阅读全文
摘要:https://oj.leetcode.com/problems/largest-rectangle-in-histogram/这道题的O(n)算法比较巧妙。基本思想是考虑某一个高度h[i],以这个高度为最高点的最大矩形两个边界高度l[i]和r[i]满足以下条件:1)h[l[i]]h[st.top(...
阅读全文
摘要:https://oj.leetcode.com/problems/word-break/水题。简单DP。class Solution {public: int n,m; bool wordBreak(string s, unordered_set &dict) { n=s....
阅读全文
摘要:https://oj.leetcode.com/problems/merge-intervals/水题。需要注意sort的用法可能在平台上不好使。/** * Definition for an interval. * struct Interval { * int start; * ...
阅读全文
摘要:https://oj.leetcode.com/problems/multiply-strings/实现两个函数:1)字符与一个串的乘法。2)两个串的加法。再考虑一些边界情况即可。class Solution {public: int n,m; string Mul(char ch,string &...
阅读全文
摘要:https://oj.leetcode.com/problems/insert-interval/一道比较简单的题。主要就是扫描一段数组,看哪些时间段与目标时间段相交,相交的那些用来更新目标时间段。在相交结束时插入目标时间段。需要注意的是目标时间出现在两个时间段中间的情况,哪个都没有相交但是也需要插...
阅读全文
摘要:https://oj.leetcode.com/problems/sort-list/实现相当麻烦的一道题。主要思想是从中间分开,然后就地的归并排序两段子链表。比较麻烦的地方有三处:1)注意子链表排序后,首尾都发生了变化,所以在排序后需要返回新的首尾。2) Merge函数内部也需要调整外面首尾的指针...
阅读全文
摘要:https://oj.leetcode.com/problems/spiral-matrix/题目没难度,就是循环把每一层的螺旋打印出来即可。需要注意每次螺旋大小缩小2,计算相应的位置并考虑左边界等于右边界的情况。class Solution {public: int n,m; int cn,cm;...
阅读全文
摘要:https://oj.leetcode.com/problems/restore-ip-addresses/跟Word Break II一个尿性的DP题目。如果直接使用vector dp[][]来进行DP会引入很大量的中间结果影响效率。因此可以先用bool dp[][]来计算出那些是合法的。然后D...
阅读全文
摘要:https://oj.leetcode.com/problems/reorder-list/需要一个栈以每次取得链表尾部的结点。有了这个栈以后,这个问题就是一个链表操作问题。对于链表的操作,需要在纸上画好每次需要调整哪些结点以及其next指针。并且一定要注意边界条件。这个题目需要注意的是栈顶元素被重...
阅读全文
摘要:https://oj.leetcode.com/problems/binary-tree-maximum-path-sum/求二叉树的连续路径加和的最大值。这道题会被坑的地方就是认为结点值都大于0。需要考虑结点值小于0的情况。考虑包含结点u的所有路径的最大值。可以看出这个最大路径有三种可能:1)只含...
阅读全文
摘要:https://oj.leetcode.com/problems/regular-expression-matching/递归的方法超时了。跟通配符的那道题类似,使用DP的方法能够AC,而且这题没有BT数据的问题。首先定义递推:f(i,j):前i个s和前j个p是否能够匹配,这里考察的元素要比通配符复...
阅读全文
摘要:https://oj.leetcode.com/problems/simplify-path/这道题很简答。就是用栈把有效目录名存起来,然后根据后面解析出的..进行出栈操作。主要麻烦在于解析路径,解析从p开始的下一个目录名,我的做法如下:1)首先跳过所有开头的'/',这里不小心写了一个死循环,距离b...
阅读全文
摘要:https://oj.leetcode.com/problems/evaluate-reverse-polish-notation/当年上课的例子。就是栈的应用,每次遇到操作符就把栈的头两个元素与操作符进行计算,再将结果压栈,如果逆波兰式没有问题,那么最后栈里应该只剩一个元素。需要注意的有两个地方:...
阅读全文
摘要:https://oj.leetcode.com/problems/longest-valid-parentheses/这题一直没有把问题想清楚,浪费了不少时间。最终解法如下:1)第一次遍历所有元素,用一个栈记录还没有匹配的"("括号的位置,在遇到")"括号匹配时出栈一个元素。2)用一个bool 数组...
阅读全文
摘要:https://oj.leetcode.com/problems/interleaving-string/这种字符串的题目已经把DP或MEMO写在了脸上。这题容易想到O(m1*m2*n)的DP方案,但这种方法有很多空间和时间的浪费。需要注意到我们在递推的比较过程中如果知道s1,s2上的指针p,q的情...
阅读全文
摘要:https://oj.leetcode.com/problems/two-sum/这道题我的方案是O(nlogn)的,首先将数组和其序号放进pair中,然后排序这个pair数组。之后就是枚举第一个数,二分查找第二个数。我使用了lower_bound:1)可以在pair数组中查找pair,这时只需要随...
阅读全文
摘要:https://oj.leetcode.com/problems/word-ladder/Word Ladder II的简化版。这个跟II比起来只需要搜索出来最短路径即可。我使用的方法还是BFS,用按层次搜索的层次来当做每个结点的距离。从start出发,不断修改单词进行扩展结点。当搜索到end时就停...
阅读全文
摘要:https://oj.leetcode.com/problems/maximum-depth-of-binary-tree/求最大深度。需要考虑root==NULL的情况,所以可以递归到NULL节点上。
阅读全文
摘要:https://oj.leetcode.com/problems/minimum-window-substring/线性复杂度的限制下,考虑使用滑动窗口法。这个方法的思路就是维持一个窗口,窗口向右边界扩张以满足限制条件。窗口左边界收缩以尽量使其最小。注意这个题目可能是一个典型的滑动窗口方法的实现。外...
阅读全文
摘要:https://oj.leetcode.com/problems/median-of-two-sorted-arrays/合并两个有序表,MergeSort的一部分的那个算法。幸运的是stl提供了merge函数。复习一下这个函数的签名:merge(first1,end1,first2,end2,de...
阅读全文
摘要:https://oj.leetcode.com/problems/divide-two-integers/不使用乘除实现除法。那么能够使用的就是+-和移位运算。首先检查边界和符号。如果用一直减的方法实现,会有可能除数很小导致超时。所以必须借助移位运算减少减法操作数目。我的想法是,首先通过被除数右移计...
阅读全文
摘要:https://oj.leetcode.com/problems/maximum-product-subarray/题目非常简单,就是要AC代码量不小,需要保证一次性正确率很难。考虑一个数组最大乘积可能的几种情况:1)0,数组中有0,且其他部分都乘积比0小。这种情况可以把问题分解成一系列0隔开的子数...
阅读全文
摘要:https://oj.leetcode.com/problems/word-break-ii/首先这个问题显然是可以利用以前搜索的结果,所以可以看出是一个具有DP性质的递推关系的题目。f(int p):后n-p个单词已经被断句的条件下,前p个所有组成的断句结果都有哪些,我们还需要一个数组dpf[],...
阅读全文
摘要:https://oj.leetcode.com/problems/decode-ways/一个DP计数的问题。解决思路就是假定后n-p个数的译码方式确定了,求前p个数的译码方式。这样对s[p-1],s[p-2]进行合理性检查并决定能否规约到子问题即可。我用了Memo的方法,DP也是一样的。class...
阅读全文
摘要:https://oj.leetcode.com/problems/string-to-integer-atoi/这道题可以看做valid number的变种。首先按照正则表达式^\s*[+,-]?[0-9]+*$构造出转换表。然后根据输入进行状态机转换。在状态转换过程中将数字和符号分别存储起来,最后...
阅读全文
摘要:https://oj.leetcode.com/problems/surrounded-regions/很简单的一道图论题。BFS或者DFS都可解。对不同的连通域使用一个color每次进行标记扩散,再根据是否遍历过程遇到了边界点来判断是否为sorround。在不使用额外内存的限制下,通过修改boar...
阅读全文
摘要:https://oj.leetcode.com/problems/text-justification/这个题目没有什么算法。但是要实现还是比较麻烦,一次写对基本不可能。注意理解清楚题意,写完程序脑子里过一遍再编译可能会好一点。主要就是每次扫面一行以内的,正确的数算上最小空格数量能放下的单词,并统计...
阅读全文
摘要:https://oj.leetcode.com/problems/lru-cache/一道简单的考察数据结构的题目。首先要理解什么是LRU。LRU是最近最少使用,也就是说时间戳上面更新最慢的那个,在capacity满的情况下需要被删除。首先需要Get(key) = value的操作,这里需要一个ma...
阅读全文
摘要:https://oj.leetcode.com/problems/wildcard-matching/最终AC的方案是DP,并使用了一些技巧减少DP内存。首先容易推出递推关系:f (i,j) :后面已经匹配的情况下,前i个s字符和前j个p串字符是否能匹配?则视p[j-1]为'?' , '*'或者一般...
阅读全文
摘要:https://oj.leetcode.com/problems/word-ladder-ii/首先,要打印出所有路径,就必须用到DFS+pre的技术。因此需要构造出这个图,又因为需要打印出最短距离,所以构造图的同时还需要知道到终点的最短路径。构造图如果枚举所有点对会超时,O(n^2)算法不可行。考...
阅读全文
浙公网安备 33010602011771号