LeetCode674. 最长连续递增序列

  • 阅读本文之前,需要先了解“动态规划方法论”,这在我的文章以前有讲过

链接:动态规划方法论

  • 本文之前也讲过一篇文章:最长递增子序列,这道题,阅读本文的同时可以与“最长递增子序列进行对比”,这样更能对比二者的区别!

LeetCode300.最长递增子序列 - Tomorrowland_D - 博客园 (cnblogs.com)

  • leetcode链接如下

力扣题目链接:

题目叙述

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

连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], ..., nums[r - 1], nums[r]] 就是连续递增子序列。

示例 1:

  • 输入:nums = [1,3,5,4,7]
  • 输出:3
  • 解释:最长连续递增序列是 [1,3,5], 长度为3。尽管 [1,3,5,7] 也是升序的子序列, 但它不是连续的,因为 5 和 7 在原数组里被 4 隔开。

示例 2:

  • 输入:nums = [2,2,2,2,2]
  • 输出:1
  • 解释:最长连续递增序列是 [2], 长度为1。

提示:

  • 0 <= nums.length <= 10^4
  • -10^9 <= nums[i] <= 10^9

动态规划思路讲解:

状态变量及其含义

  • 我们可以设置状态变量dp[i],表示以nums[i]为结尾的最长连续子序列的长度

递推公式

  • 这里我们不需要j指针,只需要将nums[i]与nums[i-1]作比较,判断它们两个是否能继续构成连续递增子序列,如果nums[i]<nums[i-1],证明nums[i]不能与nums[i-1]构成连续递增子序列,所以说dp[i]=0

  • nums[i]>nums[i-1]时,意味nums[i]与前面能继续构成连续递增子序列,所以dp[i]=dp[i-1]+1

  • 故而递推公式为:

    • dp[i]=0 (nums[i]<=nums[i-1]);
    • dp[i]=dp[i-1]+1 (nums[i]>nums[i-1])

遍历顺序

  • 这题dp[i]需要由dp[i-1]来推理出来,所以说遍历顺序显然是从前向后遍历。

如何初始化dp数组?

  • 显然,一开始dp数组中的所有元素都初始化为1,因为每个元素至少都有一个最长连续递增子序列。

举例验证dp数组

  • 举例:nums = [1,3,5,4,7]

    • dp[0]=1
    • dp[1]=2
    • dp[2]=3
    • dp[3]=0
    • dp[4]=2
  • 通过示例1的分析,我们也可以得知我们的dp数组是正确的

代码实现:

class Solution {
public:
int findLengthOfLCIS(vector<int>& nums) {
//全都初始化为1
vector<int> dp(nums.size(),1);
//结果至少是1
int ans=1;
for(int i=1;i<nums.size();i++){
if(nums[i]>nums[i-1]) dp[i]=dp[i-1]+1;
ans=max(ans,dp[i]);
}
return ans;
}
};

线性dp:LeetCode674. 最长连续递增序列的更多相关文章

  1. [Swift]LeetCode674. 最长连续递增序列 | Longest Continuous Increasing Subsequence

    Given an unsorted array of integers, find the length of longest continuous increasing subsequence (s ...

  2. LeetCode674. 最长连续递增序列

    原题链接 1 class Solution: 2 def findLengthOfLCIS(self, nums: List[int]) -> int: 3 ans = begin = 0 4 ...

  3. Leetcode674.Longest Continuous Increasing Subsequence最长连续递增序列

    给定一个未经排序的整数数组,找到最长且连续的的递增序列. 示例 1: 输入: [1,3,5,4,7] 输出: 3 解释: 最长连续递增序列是 [1,3,5], 长度为3. 尽管 [1,3,5,7] 也 ...

  4. LeetCode 最长连续递增序列

    给定一个未经排序的整数数组,找到最长且连续的的递增序列. 示例 1: 输入: [1,3,5,4,7] 输出: 3 解释: 最长连续递增序列是 [1,3,5], 长度为3. 尽管 [1,3,5,7] 也 ...

  5. 【LeetCode动态规划#14】子序列系列题(最长递增子序列、最长连续递增序列、最长重复子数组、最长公共子序列)

    最长递增子序列 力扣题目链接(opens new window) 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度. 子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其 ...

  6. LeetCode 674. Longest Continuous Increasing Subsequence (最长连续递增序列)

    Given an unsorted array of integers, find the length of longest continuous increasing subsequence. E ...

  7. [LeetCode] Longest Continuous Increasing Subsequence 最长连续递增序列

    Given an unsorted array of integers, find the length of longest continuous increasing subsequence. E ...

  8. [LeetCode] 674. Longest Continuous Increasing Subsequence 最长连续递增序列

    Given an unsorted array of integers, find the length of longest continuous increasing subsequence. E ...

  9. leetcode 674. 最长连续递增序列

    1. 题目 给定一个未经排序的整数数组,找到最长且连续的的递增序列. 示例 1: 输入: [1,3,5,4,7] 输出: 3 解释: 最长连续递增序列是 [1,3,5], 长度为3. 尽管 [1,3, ...

  10. LeetCode 674. 最长连续递增序列(Longest Continuous Increasing Subsequence) 18

    674. 最长连续递增序列 674. Longest Continuous Increasing Subsequence 题目描述 给定一个未经排序的整型数组,找到最长且连续的递增序列. Given ...

随机推荐

  1. python基础-内置函数

    # callable() # 函数用于检查一个对象是否是可调用的.如果返回 True,object 仍然可能调用失败:但如果返回 False,调用对象 object 绝对不会成功. # 对于函数.方法 ...

  2. 【资料分享】全志科技T507-H开发板规格书

    1 评估板简介 创龙科技TLT507-EVM是一款基于全志科技T507-H处理器设计的4核ARM Cortex-A53国产工业评估板,主频高达1.416GHz,由核心板和评估底板组成.核心板CPU.R ...

  3. 基于NXP i.MX 8M Mini开发板规格书(四核ARM Cortex-A53 + 单核ARM Cortex-M4,主频1.6GHz)

     1 评估板简介 创龙科技TLIMX8-EVM-B是一款基于NXP i.MX 8M Mini的四核ARM Cortex-A53 + 单核ARM Cortex-M4异构多核处理器设计的高性能评估板,由核 ...

  4. ABC199E

    考虑状压. 设计状态 \(dp_{i,j}\) 表示考虑 \(i\) 个数,每个数的使用情况的二进制压缩表示为 \(j\) 的情况下的方案数. 然后去正常转移. 唯一特殊的是将限制放在点上,假若这个点 ...

  5. Java反射机制原理详解

    什么是反射? Java反射机制的核心是在程序运行时动态加载类并获取类的详细信息,从而操作类或对象的属性和方法.本质是JVM得到class对象之后,再通过class对象进行反编译,从而获取对象的各种信息 ...

  6. [oeasy]python0137_相加运算_python之禅_import_this_显式转化

    变量类型 相加运算 回忆上次内容 上次讲了是从键盘输入变量 input 函数 可以有提示字符串 需要有具体的变量接收输入的字符串   输入单个变量没有问题 但是输入两个变量之后 一相加就非常离谱   ...

  7. [oeasy]python0118_语言的发展_希腊字符_拼音文字_亚历山大大帝

    希腊字符回忆上次内容 尼罗河流域 的 埃及圣书体 是象形文字 两河流域 的 苏美尔楔形文字 不是象形文字 做生意的 腓尼基人 利用 埃及圣书体 的 字型 苏美尔楔形文字 的 写法 构造出 腓尼基字符 ...

  8. WebAPI规范设计——违RESTful

    本文首先简单介绍了几种API设计风格(RPC.REST.GraphQL),然后根据实现项目经验提出WebAPI规范设计思路,一些地方明显违反了RESTful风格,供大家参考! 一.几种设计风格介绍 1 ...

  9. .NET 中高效 Excel 解决方案 MiniExcel

    前言 MiniExcel 是一个用于 .NET 平台的轻量级.高性能的库,专注于提供简单易用的 API 来处理 Excel 文件.以下是 MiniExcel 的特点总结: 轻量级与高效:MiniExc ...

  10. java面试一日一题:mysql执行delete数据真的被删除了吗

    问题:请讲下mysql执行了delete操作,数据真的被删除了吗 分析:这个问题考察对mysql底层存储的理解. 回答要点: 主要从以下几点去考虑, 1.肯定没有真正删除? 2.为什么这样设计? my ...