← 返回目录

674. 最长连续递增序列

第 17 / 42 卷日期:

题目描述:

给定一个未经排序的整数数组,找到最长且连续递增的子序列,并返回该序列的长度。

和 300. 最长递增子序列区别在于,本题要求递增子序列需要是连续的。

这样,这题反而会更简单一些...

  1. 本题一层 for 比较 nums[i] > nums[i - 1] 就行了;
  2. 不用像 300. 最长递增子序列两层 for 比较 nums[i] > nums[j](j在 [0, i]之间)

dp五步曲:

  1. dp[i] 表示以 i 结尾(不一定要从0开始)的连续递增子序列的长度
  2. 递推公式
  3. if (nums[i] > nums[i - 1]) // 确保连续 & 递增
  4. dp[i] = dp[i - 1] + 1;// 2、递推公式
  5. 初始化
  6. 最小长度为 1,所有 dp[i] 初始化均为 1
  7. 顺序:前到后
  8. 打印dp

注意:这里不能返回 dp[n -1],而是 return dp 数组中的 max 值

392. 判断子序列

题目描述:

给定字符串 s 和 t,判断 s 是否为 t 的子序列。

字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。

这里的子序列,不要求连续。只要相对顺序一致就 ok。

dp五部曲:

  1. dpi 表示s中下标[0,i-1]与t下标在[0,j-1]中,相同子序列长度为dpi
  2. 递推公式:(两种情况)

if (s.charAt(i - 1) == t.charAt(j - 1))

dpi = dpi - 1 + 1;

当前元素匹配,相当于当前长度为去掉 s[i-1]和t[j-1]的长度加一,即dpi = dpi - 1 + 1;

if (s.charAt(i - 1) != t.charAt(j - 1)) // 需要删去 t[j]

dpi = dpi;

相当于看s[i-1]与 t[i-2]比较

  1. 初始化

dp0 = 0; 表示空串s与t下标在[0,j-1]中,不可能有相同子序列,所以全为0 dpi = 0; 表示空串t与s下标在[0,i-1]中,不可能有相同子序列,所以全为0

全站分卷索引 · 42 卷
  1. 1代码随想录知识星球精华(最强八股文)第五版(算法篇)
  2. 2找出所有子集的异或总和再求和
  3. 3哈希表
  4. 4哈希冲突
  5. 5红黑树与AVL树
  6. 6平衡二叉树(AVL树)
  7. 7将有序数组转换为二叉搜索树
  8. 83. 分割(组合问题)
  9. 9方法论
  10. 10509. 斐波那契数
  11. 1162. 不同路径
  12. 1296. 不同的二叉搜索树
  13. 13322. 零钱兑换
  14. 14爬楼梯
  15. 15背包小总结 (01背包、完全背包)
  16. 16子序列问题
  17. 17674. 最长连续递增序列
  18. 18115. 不同的子序列
  19. 19总结
  20. 20技巧总结
  21. 21时间序列模型
  22. 22区间DP模型
  23. 23664. 奇怪的打印机
  24. 24编辑距离
  25. 25回文串
  26. 26DP递推公式总结
  27. 27排序算法
  28. 28其他算法
  29. 294. 分别用递归和非递归方式实现二叉树先序、中序和后序遍历
  30. 302. TOP N问题
  31. 313. 分布式的TOP N问题
  32. 322. Astar数据结构 + 公式
  33. 334. 代码实现
  34. 345. 总体代码
  35. 35堆排序
  36. 36单源最短路
  37. 37思维导图
  38. 38链表
  39. 39回溯
  40. 40贪心
  41. 41动态规划
  42. 42排序