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

力扣674-最长连续递增序列(Java详细题解)

题目链接:674. 最长连续递增序列 - 力扣(LeetCode)

前情提要:

因为本人最近都来刷dp类的题目所以该题就默认用dp方法来做。

dp五部曲。

1.确定dp数组和i下标的含义。

2.确定递推公式。

3.dp初始化。

4.确定dp的遍历顺序。

5.如果没有ac打印dp数组 利于debug。

每一个dp题目如果都用这五步分析清楚,那么这道题就能解出来了。

题目思路:

该题对比于力扣300-最长递增子序列,不同点就在于本题是求连续的递增序列。他要求序列是连续的。

继续用dp五部曲来分析:

1.确定dp数组和i下标的含义。

dp[i] 指的就是以i下标为结尾的数组所能找到的最长且连续递增的子序列。

2.确定递推公式。

既然要找连续子序列,说明下标为i的状态,只与他前一个状态(i - 1)有关。

当nums[i] > nums[i - 1]时,这样才是一个连续递增的序列,才能加入我们的结果集。

所以本题就用一层循环,不断求nums[i - 1]和nums[i]的状态对比。

所以递推公式就为dp[i] = Math.max(dp[i - 1] + 1,dp[i]);

当nums[i] > nums[i - 1]时,我们得把以i - 1为结尾的最长递增子序列求出再加上nums[i]的长度就为以i为结尾的最长连续递增子序列。

因为我们要取最大,所以还需要对dp[i]取一个最大值。

3.dp初始化。

由dp定义可知。dp[i]取不同的i都至少有一个最长连续递增的序列,所以我们就让dp数组的所有值都初始化为1。

4.确定dp的遍历顺序。

由递推公式可以推出dp[i]的状态只与dp[i - 1]有关,所以遍历顺序一定是要从前往后遍历的。

5.如果没有ac打印dp数组 利于debug。

在这里插入图片描述

最终代码:

class Solution {
    public int findLengthOfLCIS(int[] nums) {
        //该题与上一个题唯一的区别就是他要是连续的 连续的话 如果 nums[i - 1] < nums[i] 那么dp[i] = dp[i - 1] + 1;
        //在这里我初始化result = 1就是为了当nums.length = 1的情况会不进循环,直接返回result,而此时result 如果为0,那么结果就为0。
        //而就算nums.length = 1,他的连续递增子序列也应该是1,就是他本身,所以我初始化为1就是为了避免这个情况。
        int result = 1;
        int dp [] = new int [nums.length + 1];
        Arrays.fill(dp,1);
        for(int i = 1;i < nums.length;i ++){
            if(nums[i] > nums[i - 1]){
                dp[i] = dp[i - 1] + 1;
            }
            result = Math.max(result,dp[i]);
        }
        return result;
    }
}

这一篇博客就到这了,如果你有什么疑问和想法可以打在评论区,或者私信我。

我很乐意为你解答。那么我们下篇再见!


http://www.kler.cn/news/315126.html

相关文章:

  • glTF格式:WebGL应用的3D资产优化解决方案
  • 反编译 AndroidManifest.xml文件-android反编译技术
  • 408算法题leetcode--第11天
  • 4.提升客户服务体验:ChatGPT在客服中的应用(4/10)
  • 如何用 HAproxy 实施高可用部署 | OceanBase 实践
  • 深度学习自编码器 - 去噪自编码器篇
  • Vue3.5+ 侦听器的3个更新
  • Java 编码系列:String、StringBuilder 与包装类
  • 前端分段式渲染较长文章
  • SQL_yog安装和使用演示--mysql三层结构
  • Vue.js 组件数据定义:为何使用函数而非对象
  • 微服务注册中⼼2
  • 基于python+django+vue的医院预约挂号系统
  • MySQL系列—11.Redo log
  • el-upload如何自定展示上传的文件
  • [数据集][目标检测]棉花叶子病害检测数据集VOC+YOLO格式977张22类别
  • go项目多环境配置
  • Redis中的数据结构详解与示例
  • Java笔试面试题AI答之单元测试JUnit(7)
  • Winform中使用MySQL数据库
  • Hutool:Java开发者的瑞士军刀
  • 2.使用 VSCode 过程中的英语积累 - Edit 菜单(每一次重点积累 5 个单词)
  • 如何在 Ubuntu 16.04 服务器上安装 Python 3 并设置编程环境
  • JUC并发编程
  • 第二十一节:学习Redis缓存数据库的Hash操作(自学Spring boot 3.x的第五天)
  • 深度学习02-pytorch-08-自动微分模块
  • OctoSQL 查询大量数据库和文件格式
  • Wireshark学习使用记录
  • 学习笔记JVM篇(三)
  • Jumpsever