【Leetcode Daily】300最长递增子序列
发表于|更新于|力扣日常 | LeetcodeDaily
|总字数:419|阅读时长:1分钟|浏览量:
题目浅析
想查看原题可以点击题目链接。
简单地说,就是给你一个整型数组,你可以删除其中元素,但不改变元素顺序的情况下,制造出一个严格递增子数组,求该子数组的最长长度
思路分享
目前的 dp 无非两种思路:1. 选或不选;2. 枚举选哪个。选或不选形成的决策类似二叉树,而枚举选哪个会类似多叉树。前者很多时候划分为前 i 个元素的子问题,后者则是经常划分为以 i 下标为尾部的子问题。对于本题,可以分为以 i 下标为末尾的最长递增子序列长度。
回到本题,首先尝试用记忆化回溯实现,如果采用思路一,那么在选择当前位的数字时,传递的过程中还需要报错前一个选择的数字下标(或者值),否则将无法保证选出来的序列严格递增;如果采用思路二,则是在枚举的循环内完成对不能满足严格递增情况的过滤,只要传递尾部下标即可。
代码解答(强烈建议自行解答后再看)
- 参考题解
1 | class Solution: |
文章作者: 陆爻齐-LuYaoQi
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 LuYaoQi's Blogs!
相关推荐

2025-10-13
【Leetcode Daily】1143最长公共子序列
题目浅析 想查看原题可以点击题目链接。 简单地说,就是找到两个字符串的最长公共子序列(具体含义请看原题)长度。 思路分享 这是线性 DP 的经典题目,子序列由于是可以选择性的删除中间部分,所以计算两个字符串的公共子序列,可以分为多个子问题,具体分析如下: https://leetcode.cn/problems/longest-common-subsequence/solutions/2133188/jiao-ni-yi-bu-bu-si-kao-dong-tai-gui-hua-lbz5/ 对于两个字符串,每分别选的两个字符各有选和不选两种情况,也就是四种情况。在相等的情况下,肯定是两个都选好;不等时则两边各选一次。两边都不选一定不如上面三种情况。 比如,有长 n、m 的两个字符串的最长公共子序列就是下面的子情况推导出来的:1. n-1、m;2. n、m-1;3. n-1、m-1. 前两个是字符匹配失败的场景,3...

2025-10-15
【Leetcode Daily】72编辑距离
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给两个字符串,求一个字符串到另一个字符串的最小编辑距离。所谓的编辑距离对一个字符串做插入、删除或更改一个字符算是一个单位的编辑距离。 思路分享 求一个字符串(长为 n)到另一个字符串(长为 m)的最小编辑距离,比如求从 horse 到 ros 的编辑距离 l,可以视为 hors 到 ros 的距离 l+1(因为左边字符串最右边删去一个字符)以此类推,可以得到记忆化递归的写法。 重点记录由两个一维数组优化到一个一维数组中的思路,由于这里的状态由其位置的左、左上、上三个地方决定,所以必须从左向右遍历,如果直接这么做,会丢失坐上的数据,所以需要额外一个变量记录左上位置的数据,并及时更新。 代码解答(强烈建议自行解答后再看) 参考题解 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061class Solution: def...

2025-04-24
【Leetcode Daily】1052爱生气的书店老板
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给两个整型数组,以及一个整数 minutes,按某个要求(具体看原题,难以简化),求一个数组在另一个数组和 minutes 约束下的求的最大值。 思路分享 陆爻齐的思路是计算窗口内(也就是冷静的分钟)不满意生气离开的最大值,加上不生气的心情值,再减去所有生气离开的数值得出答案,但由于思想复杂了点,所以略微修改模板结构,也就是下面陆爻齐的答案。 参照灵茶山艾府,其实只要区分开两部分相加即可,然后直接参照模板。这两部分,一个是不生气的值,一个是生气下的值,取生气下最大值即可。这样就不用像上面一样多一次运算。 https://leetcode.cn/problems/grumpy-bookstore-owner/solutions/2751888/ding-chang-hua-dong-chuang-kou-fu-ti-dan-rch7/ 代码解答(强烈建议自行解答后再看) 陆爻齐的解法 12345678910111213141516171819202122232425class Solution...

2025-04-28
【Leetcode Daily】1297子串的最大出现次数
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给一个字符串,求满足要求的子串中,出现最多的次数。该要求为 1. 内部的字母数量小于 maxLetters;2. 整个字符串的长度在 minSize 和 maxSize 之间(闭区间)。 思路分享 该题的难度在于干扰项 maxSize,由于求子串尽可能多的出现,所以该子串的长度必然越小越好,就是 minSize。 就是定长滑动窗口(【Leetcode Daily】1456定长子串中元音的最大数目),有了个字母数量不大于 maxLetters 的限制,再用哈希统计满足要求字符串出现的次数即可。 代码解答(强烈建议自行解答后再看) 陆爻齐的解法 1234567891011121314151617181920212223242526272829class Solution {public: int maxFreq(string s, int maxLetters, int minSize, int maxSize) { vector<int>...

2025-04-23
【Leetcode Daily】1423可获得的最大点数
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给一个整型数组和一个数字 k,求按照某种方式下获取卡牌所得的最大点数。该方式为每次只能够取得最左或者最右的卡牌。 思路分享 逆向思路,由于每次拿卡牌只拿两侧,所以中间部分是连续的,可以视为一个定长滑动窗口,只不过是求窗口内的最小和,通过这个数值得到答案。滑动窗口模板沿用【Leetcode Daily】1456定长子串中元音的最大数目 正向思路,穷举所有组合可能。 https://leetcode.cn/problems/maximum-points-you-can-obtain-from-cards/solutions/2551432/liang-chong-fang-fa-ni-xiang-si-wei-zhen-e3gb/ 代码解答(强烈建议自行解答后再看) 逆向 12345678910111213141516171819202122232425class Solution {public: int maxScore(vector<int>& cardPoints,...

2025-04-18
【Leetcode Daily】1343大小为K且平均值大于等于与之的子数组数目
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给一个整数数组,两个整数 threshold 和 k。k是限定子数组的长度,threshold 是阈值。求这个数组中长度为 k 且平均值大于阈值 threshold 的数目。 注意,在算法题中,子数组默认连续,而子序列默认不连续。 思路分享 定长滑动窗口模板秒了,具体参照 【Leetcode Daily】1456定长子串中元音的最大数目 不过这里的和用 int 也没问题,我估计是因为是大于等于阈值这个条件的关系,大于的情况即使因为整数的小数丢失,也能算做等于情况计入。 代码解答(强烈建议自行解答后再看) 滑动窗口 1234567891011121314151617181920class Solution {public: int numOfSubarrays(vector<int>& arr, int k, int threshold) { int result = 0; int sum = 0; for (int i =...
公告
不定时更新,记录所学所想
系列文章