自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 312. Burst Balloons(戳气球)

312. Burst Balloons我们来看看这道题,花了很久才想明白评论区大佬们的解答和代码,一个是由于语言不通第二博主太菜。我们来仔细思考下这道题,问题的关键是这个子问题怎么划分呢,如果我们从上往下思考会有点奇怪,假设这么想第一个戳破的气球会将序列分成两部分,但是由于邻居的原因必然会影响最后结果的计算,那么我们怎么划分这个问题,我们可以从后考虑,我们现在考虑这么一个问题,被戳破的气球在后...

2019-12-11 11:33:45 181 1

原创 309. Best Time to Buy and Sell Stock with Cooldown(最佳买卖股票时机含冷冻期)

309. Best Time to Buy and Sell Stock with Cooldown又是股票买卖的问题,这道题需要考虑到cooldown问题,也就是在卖出后不能立即买入而是有一天的冷却时间。我们需要怎么考虑这个问题,首先怎么找到状态转移过程。我们定义两个状态数组 buy 和 sell。buy[i]:如果前i天以购买或等待结束,则可以赚取最大利润。 例如“购买,出售,购买”或“...

2019-12-10 16:01:26 212

原创 174. Dungeon Game(地下城游戏)

174. Dungeon Game题目描述了很多故事情境,简单介绍就是需要从左上角走到右下角,当中保证骑士经过的房间自身健康值>=1,那么求出最少需要的骑士初始值。且每次骑士只能从右或者下两个方向走动。很容易知道,在网格P上,由于“在任何时候他的健康点下降到0或以下,他都会立即死亡”,因此剩余的健康值应至少为1,即initialHealth + dungeon> = 1,我们具有...

2019-11-25 15:30:19 167

原创 152. Maximum Product Subarray(乘积最大子序列)

152. Maximum Product Subarray乘积最大的子序列,其实这里用子串更加好,在前面的文章中我说过关于子序列与子串的区别,那么我们现在看到这个题目首先可以联想到最长累加最大的子串,这题赫那道题有点相似点,其实我相信大部分人看到这个题目说这很简单,只需要两次遍历就可以暴力解出。确实暴力可以解答,但是这道题对于O(n·n)应该是超时的,那么这道题可不可以用一次遍历就解答出来呢。...

2019-11-25 10:32:07 144

原创 140. Word Break II(单词拆分 II)

虽然这道题归类在DP类但是我没有想到该如何用DP的思想去求解这个问题,看到这个题目的第一瞬间就是想到取用回溯的方法去求解这个问题,那么利用回溯法就非常简单,但是博主有个问题就是超时,但是我看了讨论取得一些解法方法类似他们居然就不回超时,着很奇怪头皮发麻,我先mark一下自己的解法,我觉得思路是没有问题的,哪里需要优化一下是一个问题。具体代码如下:class Solution {public:...

2019-11-18 10:31:04 147

原创 139. Word Break(单词拆分)

139. Word Break看到这题的想法是DP问题,但是怎么写是一个问题,因为DP的感觉就是暴力解决问题,想了下好像Trie Tree好像也可解决问题,我们自定义一个数据结构可以解决的感觉,但是博主还是写的DP方法,那么回到问题,思路很简单,我们只要遍历所有的情况以此判断当前字符串的子串是否在字典中,我们将字典中的单词存入set中以方便查找。具体代码如下:class Solution {...

2019-11-18 09:47:41 144

原创 132. Palindrome Partitioning II (分割回文串 II)

132. Palindrome Partitioning II回文串的题目,这道题可以利用我之前的一个优化方案,我们知道回文串中有一个非常讨厌的情况就是奇偶问题,我们可以通过修改原始串达到所有的串都是一个奇数串。当中的最长回文串里面是利用间隔之间添加‘#’使得字符串都是奇数个。这道题呢依然可以利用,同时当中的思想也和刚才那道最长回文串非常相似。考虑这么一个问题:字符串s:aabac现在我们...

2019-11-15 14:56:56 148

原创 123. Best Time to Buy and Sell Stock III(买卖股票的最佳时机)

123. Best Time to Buy and Sell Stock III这道题是在121题上的进阶版本,但是我们依然可以通过求解121题的思路来求解这道题。首先我需要解释一下思路,因为代码的写法不适合去理解,我们知道第一次买股票的原则是和121题一样,我们记录最低的价格股票之后找到最高的差价,这个没有问题,那么关键点在于第二次购买股票,我们可以这样理解,如果现实中,你买卖了一次股票并且...

2019-11-15 11:29:26 142

原创 121. Best Time to Buy and Sell Stock(买卖股票的最佳时机)

121. Best Time to Buy and Sell Stock这是一道easy的题目,但是他的解题思路对于后面的进阶则是受到他的启发,所以我在这里特地记录一下,好了我们看一下题目,思路非常简单,我们只需要找到最低的价格或者说最低的成本,在之后的序列中找到最高的差价即可,那么我们一次遍历即可求出,具体来看代码的实现。class Solution {public: int maxP...

2019-11-15 11:00:10 131

原创 115. Distinct Subsequences(不同的子序列)

115. Distinct SubsequencesOK,乍一看题目是我会写的题目,没错字符串匹配问题,仔细一想对不起,老样子状态转移过程写的有点问题,仔细想一想加上讨论区的醍醐灌顶,明白。字符串匹配问题,我们同样从后往前考虑,假设当前字符串 s [0, i),也就是从0到i-1的字符和字符串 t [0, j)已经匹配完成,并且dp[ i ][ j ]存的是当前有多少符合要求的子序列。那么考虑...

2019-11-08 16:18:11 193

原创 552. Student Attendance Record II(学生出勤记录 II)

552. Student Attendance Record II博主看到这题时候第一感觉就是DP方法,但是想了一会方程式写不出来,然后开始怀疑是不是动态方程,想了一下过程感觉极其复杂。看了讨论区,茅塞顿开。首先讲解一下过程。首先我们定义一个问题,我们在字符串最后添加一个字符只能是以A L P三种结尾,因此定义T(n)是长度为n的所有情况。那么:T(n) = A(n) + L(n) + ...

2019-11-07 12:33:43 210

原创 99. Recover Binary Search Tree(恢复二叉搜索树)

99. Recover Binary Search Tree题目要求我们使用原地算法,也就是不使用额外的空间O(1), 仔细想了下倒是可以利用多次循环判断是否属于搜索树,不属于时候交换两个节点的值,知道形成一棵符合要求的搜索树。具体代码如下:class Solution {public: void recoverTree(TreeNode* root) { TreeNode* pre...

2019-11-06 13:56:49 198

原创 98. Validate Binary Search Tree(验证二叉搜索树)

98. Validate Binary Search Tree如题验证一个树是否是搜索树,搜索树的性质在这里就不说了,那首先想到一个简单的就是递归中序遍历,如果出来的这个数组不是有序的,那么这棵树必然不是一个搜索树,这是一个做法,但是如果门不使用额外空间,并且采用递归的方式判断一棵树是否是搜索树的条件是什么,在从root节点递归到左子树中时候,左子树中最大的节点,也就是左子树中最右边的节点需要...

2019-11-05 23:37:15 126

原创 49. Group Anagrams(字母异位词分组)

49. Group Anagrams我这里说的不是常规解法,用到了一种巧妙地解题思路或者说是一种数据结构的特性,对于这道题我们可以用hash_map 来实现存储是一个非常高效的方法。废话不多说上代码。class Solution {public: vector<vector<string>> groupAnagrams(vector<string>&a...

2019-11-05 09:49:34 164 1

原创 51. N-Queens && 52. N-Queens II(N皇后)

51. N-Queens经典的N皇后问题,典型的回溯问题,这里我就不解释什么思路了,我相信大家对于N皇后问题还是非常熟悉的,直接上代码。class Solution {public: vector<vector<string>> solveNQueens(int n) { vector<vector<string>> res; ve...

2019-11-05 09:43:25 156 1

原创 55. Jump Game && 45. Jump Game II(跳跃游戏)

Jump Game看到题目OK 似乎可以用BFS来做,这也是博主采用的方法,智商不够想不到smart的方法,开开心心的去提交果然超时,可恶。在讨论区逛了一番之后发现一个比较好的解法,主要也适用于第二题的通用解法,直接上代码。class Solution {public: bool canJump(vector<int>& nums) { int m = nums....

2019-11-04 15:14:30 111

原创 72. Edit Distance(编辑距离)

72. Edit Distance如题属于字符串匹配类型,需要计算出最少的变换次数使得字符串匹配,那么这个问题一看就感觉是DP。那么关键的状态转移过程怎么写呢。老办法,看过我经典动态规划子串与子序列一和经典动态规划子串与子序列二的同学应该很熟悉了,关于字符串问题,我们从后往前考虑。我们定义dp[ i ][ j ]代表word1[0, i) 和 word2[0, j)注意这里是不包含 i 和 j...

2019-11-03 10:24:12 109

原创 76. Minimum Window Substring(最小覆盖子串)

76. Minimum Window Substring乍一看和最长公共子序列好像,仔细一想对不起我写不出状态转移过程,放弃。那么我们如何求这道题呢,再再再次看了讨论区,OK。利用hash_map完美解决这道题,并且时间复杂度还可以。class Solution {public: string minWindow(string s, string t) { int m = s.siz...

2019-11-02 13:53:17 118

原创 77. Combinations(组合)

77. Combinations博主在看到这道题的时候第一想法哇好简单,但是仔细一想,有点棘手如果不用暴力去做的话。想了很久也没有一个smart的想法,直到看到讨论区中一个解法,真是神乎其技,讨论区永远不缺的就是大佬。直接上代码,让大家感受一下代码的魅力,这是我第二次回想这个解法,过了一段时又忘了 但是有点印象具体写法有点模糊。class Solution {public: vector...

2019-11-02 13:02:08 115

原创 78. Subsets(子集) && 90. Subsets II(子集II)

78. Subsets这道题是一个很简单的利用回溯法求解的问题,如果想怎么增加题目的难度,那么如果所给集合中有重复的数字,那么相对于来说稍微复杂点,我们之后在讨论,对于程序员来说直接上代码比我废话要好很多。class Solution {public: vector<vector<int>> subsets(vector<int>& nums)...

2019-11-02 12:30:00 125

原创 84. Largest Rectangle in Histogram(柱状图中最大的矩形)

84. Largest Rectangle in Histogram这道题的解题思路其实不是很难,我们需要考虑的是对于每一个柱形图它的左右两端所能到达的最远距离,什么意思呢,我们以第二个柱形图1考虑,它的左边柱形图2比它高,所以它能到达的左边最远距离为1,同理它到达最右边的是最后一个柱形图,因为都比他高,那么他的面积就是(1 + 1 + 4) * 1。我们在看高度为5的柱形图,可以看到他的左边...

2019-11-01 10:29:37 146

原创 85. Maximal Rectangle(最大矩形)

85.Maximal Rectangle从0 1矩阵中求解最大矩形面积,博主在看到这个题目的时候第一反应就是暴力,没有暴力解决不了的问题,但是一定会超时,而且也是非常不好的解决方案,有没有什么比较好的思路呢,Mark一下讨论区中的DP解法。只能说看到DP解法的时候热血沸腾,居然还可以这样子,废话不多说。首先我们定义三个辅助数组,height [ ], left [ ], right [ ]。...

2019-11-01 10:10:14 317 1

原创 87. Scramble String(扰乱字符串)

87. Scramble String记录下讨论区中非常好的一个解题思路,老样子我们还是先上代码然后解析。class Solution {public: bool isScramble(string s1, string s2) { int m = s1.size();int n = s2.size(); string res; if (m == 0||n==0) re...

2019-11-01 10:00:05 376

原创 经典动态规划子串与子序列问题二

3最长重复子串上一篇说了两个子序列问题,这片开始说子串问题,要注意到子串和子序列的区别。看到这个问题可能第一时间想到暴力搜索,确实暴力可以解决一切问题。但是今天说一下利用后缀数组求解的问题,至于什么是后缀数组在《编程珠玑》上又很好地解释。这个结构是一个字符指针数组,记录目标字符串的所有后缀的起始地址,例如banana这个单词的后缀数组为:suff[0]:bananasuff[1]:anan...

2019-10-31 17:08:45 372

原创 95. Unique Binary Search Trees II && 96.Unique Binary Search Trees (不同的二叉搜索树 )

95. Unique Binary Search Trees IIGiven n, how many structurally unique BST’s (binary search trees) that store values 1 … n?从上图看到需要输出所有搜索树的情况而不是仅仅输出有多少种可能性,为什么我要说这个问题,是因为如果仅仅要输出多少种可能性,可以利用卡特兰数来求解这个问...

2019-10-31 11:22:15 111

原创 97. Interleaving String

97. Interleaving StringGiven s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2.Example 1:Input: s1 = “aabcc”, s2 = “dbbca”, s3 = “aadbbcbcac”Output: trueExample 2:Input: s1 ...

2019-10-31 11:03:52 106

原创 经典动态规划子串与子序列问题一

这篇我将完整列出所有景点动态规划子串子序列的所有案例以及多种解法1.最长公共子序列问题(LCS)一个字符串S,去掉零个或者多个元素所剩下的子串称为S的子序列。最长公共子序列就是寻找两个给定序列的子序列,该子序列在两个序列中以相同的顺序出现,但是不必要是连续的。例如序列X=ABCBDAB,Y=BDCABA。序列BCA是X和Y的一个公共子序列,但是不是X和Y的最长公共子序列,子序列BCBA是X和...

2019-10-30 11:44:46 605

空空如也

空空如也

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

TA关注的人

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