摘要:
last dance 柱状图中最大的矩形 leetcode:84. 柱状图中最大的矩形 单调栈 思路 和接雨水很类似,但需要首尾加0(尾0是为了触发计算,首0是为了避免首元素触发计算时没有left) 注意点 尾加0后还是要遍历到heights.size()-1,因为是以取出元素为基准计算的,而取出元 阅读全文
摘要:
终于接到你 下一个更大元素Ⅱ leetcode:496. 下一个更大元素 I 单调栈 思路 主要是循环数组的处理。 直接等效为长度为2N,重复两遍的原数组即可,i<nums.size()变为i<2*nums.size()、i变为i%nums.size()。 代码实现 对每个元素都再遍历一遍原数组长度 阅读全文
摘要:
每日温度 leetcode:739. 每日温度 单调栈 思路 单调栈,存放元素下标。 遍历一遍,每个元素和栈顶元素比较: <=栈顶元素,入栈 >栈顶元素,result[st.top()] = i - st.top();弹出 继续,直到遍历结束或<=栈顶元素 代码实现 class Solution { 阅读全文
摘要:
子序列问题 最长递增子序列 leetcode:300. 最长递增子序列 动态规划 代码实现 /* 以nums[i]结尾的(含)递增子序列最长为dp[i] dp[i]由dp[0~i-1]的最大值推出 if(nums[i] > nums[j]) dp[i] = max(dp[i],dp[j] + 1); 阅读全文
摘要:
DP最后一集 回文子串 leetcode:647. 回文子串 动态规划 代码实现 class Solution { public: /* s[i:j]回文子串个数为dp[i][j] if(s[i] == s[j]){ if(j-i <= 1) dp[i][j] = true; else dp[i][ 阅读全文
摘要:
两个字符串的删除操作 leetcode:583. 两个字符串的删除操作 动态规划 思路 先求最长子序长度 然后计算两个原字符串离最长子序长度差多少。 代码实现 class Solution { public: /* (之前搞错了)最长子序长度 word[0:i-1]和word2[0:j-1]的最长子 阅读全文
摘要:
判断子序列 leetcode:392. 判断子序列 动态规划 代码实现 class Solution { public: /* 不连续子序列(公共子序) 0~i-1 0~j-1的最长公共子序长度是dp[i][j] if(s[i-1] == s[j-1]) dp[i][j] = dp[i-1][j-1 阅读全文
摘要:
最长公共子序列 leetcode:1143. 最长公共子序列 动态规划 思路 和最长重复子序列很像,但是这个不要求连续。 意义略有不同,因此result不需要找最大值,直接就是最末的dp元素。 代码实现 class Solution { public: int longestCommonSubseq 阅读全文