首页 > 其他分享 >线性dp:LeetCode674. 最长连续递增序列

线性dp:LeetCode674. 最长连续递增序列

时间:2024-08-24 19:14:44浏览次数:8  
标签:nums 递增 连续 序列 LeetCode674 最长 dp

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;
    }
};

标签:nums,递增,连续,序列,LeetCode674,最长,dp
From: https://www.cnblogs.com/Tomorrowland/p/18378124

相关文章

  • 线性dp:最长公共子串
    最长公共子串本文讲解的题与leetcode718.最长重复子数组,题意一模一样,阅读完本文以后可以去挑战这题。力扣链接题目叙述:给定两个字符串,输出其最长公共子串的长度。输入ABACCBAACCAB输出3解释最长公共子串是ACC,其长度为3。与最长公共子序列的区别公共子串:字符必须......
  • 线性dp:大盗阿福(打家劫舍)
    大盗阿福本题与leetcode198题——打家劫舍的题意一模一样,阅读完本文以后可以尝试以下题目力扣题目链接)题目叙述:阿福是一名经验丰富的大盗。趁着月黑风高,阿福打算今晚洗劫一条街上的店铺。这条街上一共有N家店铺,每家店中都有一些现金。阿福事先调查得知,只有当他同时洗劫了两......
  • Bomb(数位DP)
    题目描述Thecounter-terroristsfoundatimebombinthedust.Butthistimetheterroristsimproveonthetimebomb.Thenumbersequenceofthetimebombcountsfrom1toN.Ifthecurrentnumbersequenceincludesthesub-sequence"49",thepowero......
  • 半回文串(dp套dp)
    第4题   半回文串 查看测评数据信息给定一个长度为n的只含小写英文字母的字符串S和一个整数k,请你将S分成k个子字符串,使得每个子字符串变成半回文串需要修改的字符数目最少。请你返回一个整数,表示需要修改的最少字符数目。下面定义什么事半回文串:如果一个字符串从左往右......
  • 线性dp:编辑距离
    编辑距离本题与力扣72.编辑距离题意一样,阅读完本文可以尝试leetcode72.力扣题目链接题目叙述输入两个字符串a,b。输出从字符串a修改到字符串b时的编辑距离输入NOTVLOVER输出4题目解释:动态规划思路这个问题显然是一个最优解问题,我们可以考虑动态规划的思路,那么我......
  • 计算机网络——TCP协议与UDP协议详解(下)
    一、TCP协议1.1TCP协议的报文TCP全称为"传输控制协议(TransmissionControlProtocol")。人如其名,要对数据的传输进行一个详细的控制。我们先看其报文格式,如下图:TCP报文由以下几个字段组成:源端口号和目标端口号:每个TCP连接都有一个源端口号和一个目标端口号。源端口号......
  • 代码实现WordPress主动推送及自动推送至百度搜索收录
    站长们辛辛苦苦写的文章,无非就是让百度收录,也可以帮助人,也可以给自己站或者帮人优化的站带来流量,今天就来发一篇关于wordprss主动推送给百度的方法;使用方法,U8格式放在wp当前模板functions.php里即可12345678910111213141516171819202122232425262......
  • 阿里dataworks通过pyodps 3获取表元数据及质量稽核
    用途:本脚本的主要作用就是获取所属工作空间中表字段信息核心脚本:本逻辑主要需要五个核心脚本:00_task_meta_setup_time#用于创建表及设置odps的启动时间01_task_meta_fields_move#搬迁数据02_task_meta_tables#表元数据获取及数据量统计03_task_meta_fields_parallel......
  • QPointer、QScopedPointer、QSharedPointer、QWeakPointer
    QPointer、QScopedPointer、QSharedPointer、QWeakPointerQSharedPointer:std::shared_ptrQWeakPointer:std::weak_ptrQScopedPointer:std::unique_ptrQPointer:无STL等效项。QObject析构时为空。QPointer功能:一个“半自动”的指针包装器。通常情况下,我们在手动delete一......
  • 遷移Wordpress到新域名,新子域名
    1.0前言把Wordpress遷移到WordpressMultiSites的子域名,因此“All-in-OneWPMigrationandBackup”就需要付費VIP才支持遷移子域名。但用手動方法也可以實現遷移到子域名。延伸文章:Wordpress主題文章wordpress更改domain域名和數據庫連接2.0 “All-in-OneWPMigratio......