当前位置: 首页 > article >正文

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

目录

    • 题目思路
    • 动态规划

题目来源
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 {
    public int findLengthOfLCIS(int[] nums) {
        if(nums == null || nums.length == 0){
            return 0;
        }
        int[] dp = new int[nums.length];
        int result = 1;
        for(int i = 0;i<nums.length;i++){
            dp[i] = 1;
        }
        for(int i = 1;i<nums.length;i++){
            if(nums[i]>nums[i-1]){
                dp[i] = dp[i-1]+1;
            }
            result = dp[i] > result?dp[i] : result;
        }
        return result;
    }
}

在这里插入图片描述


http://www.kler.cn/a/3220.html

相关文章:

  • 论文阅读(十四):贝叶斯网络在全基因组DNA甲基化研究中的应用
  • Nuitka打包python脚本
  • 如何获取小程序的code在uniapp开发中
  • C语言初阶力扣刷题——349. 两个数组的交集【难度:简单】
  • Python 包管理工具 pip - pip 基础(安装包、升级包、卸载包、查看已安装的包、列出已安装的包)
  • 【Linux】Linux C比较两个 IPv6 网关地址是否相等,包括前缀
  • .NET Core 实现Excel的导入导出
  • 裸机条件下写一个基于时间片轮转的多任务并发程序
  • 动态内存管理(上)——“C”
  • 学习系统编程No.9【文件操作】
  • jvm_根节点枚举安全点安全区域
  • JavaScript传参的6种方式
  • 前端三剑客常见面试题及其答案
  • dwf镜像安装
  • Vue实战【Vue项目开发时常见的几个错误】
  • 不同类型的电机的工作原理和控制方法汇总
  • 《Qt 6 C++开发指南》提供4个版本的示例程序
  • 可别再用BeanUtils了(性能拉胯),试试这款转换神器
  • CentOS支持中文
  • 蓝桥杯嵌入式--LCD屏幕使用提升
  • 自动驾驶V2X
  • 【10】核心易中期刊推荐——模式识别与机器学习
  • Github隐藏功能显示自己的README,个人化你的Github主页
  • 【嵌入式烧录/刷写文件】-1-详解Motorola S-record(S19/SREC/mot/SX)格式文件
  • [入门必看]数据结构2.3:线性表的链式表示
  • 【Linux】进程控制