LeetCode-674. 最长连续递增序列

左手的ㄟ右手 2024-03-26 21:35 195阅读 0赞

目录

    • 题目思路
    • 动态规划

题目来源
674. 最长连续递增序列

题目思路

300.最长递增子序列最大的区别在于“连续”。
https://donglin.blog.csdn.net/article/details/129748800

动态规划

  • 1.确定dp数组(dp table)以及下标的含义

dp[i]:以下标i为结尾的连续递增的子序列长度为dp[i]。
注意这里的定义,一定是以下标i为结尾,并不是说一定以下标0为起始位置。

  • 2.确定递推公式

如果 nums[i] > nums[i - 1],那么以 i 为结尾的连续递增的子序列长度 一定等于 以i - 1为结尾的连续递增的子序列长度 + 1 。
即:dp[i] = dp[i - 1] + 1;
本题一层for循环就行,比较nums[i] 和 nums[i - 1]。

  • 3.dp数组如何初始化

以下标i为结尾的连续递增的子序列长度最少也应该是1,即就是nums[i]这一个元素。
所以dp[i]应该初始1;

  • 4.确定遍历顺序

从递推公式上可以看出, dp[i + 1]依赖dp[i],所以一定是从前向后遍历。

  • 5.举例推导dp数组
    已输入nums = [1,3,5,4,7]为例,dp数组状态如下:
    在这里插入图片描述
    代码实现

    class Solution {

    1. public int findLengthOfLCIS(int[] nums) {
    2. if(nums == null || nums.length == 0){
    3. return 0;
    4. }
    5. int[] dp = new int[nums.length];
    6. int result = 1;
    7. for(int i = 0;i<nums.length;i++){
    8. dp[i] = 1;
    9. }
    10. for(int i = 1;i<nums.length;i++){
    11. if(nums[i]>nums[i-1]){
    12. dp[i] = dp[i-1]+1;
    13. }
    14. result = dp[i] > result?dp[i] : result;
    15. }
    16. return result;
    17. }

    }

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,195人围观)

还没有评论,来说两句吧...

相关阅读