LeetCode-最长递增子序列

news/2024/10/21 9:53:39/

每日一题

今天继续来练习动态规划

题目要求

给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。

子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列

示例 1:

输入:nums = [10,9,2,5,3,7,101,18]
输出:4
解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。

示例 2:

输入:nums = [0,1,0,3,2,3]
输出:4

示例 3:

输入:nums = [7,7,7,7,7,7,7]
输出:1

题目解析

这道题很明显是需要用动态规划来解决的,那么该如何定义dp数组来解决这道题呢?

这道题求的是最长的递增子序列,dp数组每一位上表达一定是子序列的最大长度,我最开始的想法是用dp[i]来表示从开始到第i位为止,这几位中最长的递增子序列长度。

后来又想了想,这样做不现实,因为需要考虑到后面的情况,前面记录的最长子序列加上后面一部分不一定会得到整个数组的最长子序列,相反可能前面没有记录的几个数字可能会和后面的部分组成最长的递增子序列。

例如数组[7,8,1,9,10,2,3,4,5,6]

如果按我开始的想法,到10的时候记录下的最长子序列一定是7,8,9,10长度为4,当时前面的1可以和后面的2,3,4,5,6组成更长的子序列,长度为6。因此这种想法不可行。需要转变思路。

既然这样不行,我可以让dp[i]表达在一定有nums[i]的情况下,截至到第i位可以组成的最长子序列。这样求完后只需要在统计一个dp数组中的最大值即可得到最长的递增子序列。

例如数组[10,9,2,5,3,7,101,18]

其可以得到的dp数组为[1,1,1,2,2,3,4,1],尤此就可以发现最长的子序列长度为4.

具体操作只需要比遍历到nums[i]时,查找dp[0]到dp[i-1]中最大的且在nums中小于nums[i]的。

代码实现

java">class Solution {public int lengthOfLIS(int[] nums) {int[] dp =new int[nums.length];dp[0]=1;for(int i=1;i<nums.length;i++){int cur = nums[i];int max = 0;for(int j=0;j<i;j++){if(nums[j]<cur&&dp[j]>max) max = dp[j];}dp[i]=max + 1;}int res =0;for(int x:dp){if(x>res) res = x;}return res;}
}


http://www.ppmy.cn/news/1434880.html

相关文章

C系统编程:从零手搓一个shell

背景 这么久没更新就是在干这件事&#xff01;&#xff01;因为系统编程已经学的差不多了&#xff0c;所以想找几个项目练练手&#xff0c;之前就一直想写一个自己的shell&#xff01;&#xff01;现在终于有机会实现了。 首先说明一下我的操作系统&#xff1a;Arch linux 服务…

晨昏线学习

看视图记得标自转方向

cd /op-bash: 无法为立即文档创建临时文件: 设备上没有空间

问题 在shell输入命令按tab键时出现以下报错 (base) [link999hadoop102 ~]$ cd /op-bash: 无法为立即文档创建临时文件: 设备上没有空间 -bash: cd: /op: 没有那个文件或目录原因分析 磁盘空间不够 df -Th # 通过命令查看具体情况解决 1、清理大文件 进入到 容量-已用 使…

上海计算机学会 2024年4月月赛 丙组T1 最大公约数

第一题&#xff1a;T1最大公约数 标签&#xff1a; g c d gcd gcd题意&#xff1a;求 a a a和 b b b的最大公约数&#xff08; 1 ≤ a , b ≤ 1 , 000 , 000 , 000 1≤a,b≤1,000,000,000 1≤a,b≤1,000,000,000&#xff09;题解&#xff1a;辗转相除法 g c d ( a , b ) g c …

循环队列中学习

循环队列中&#xff0c;由于入队时尾指针向前追赶头指针;出队时头指针向前追赶尾指针&#xff0c;造成队空和队满时头尾指针均相等。因此&#xff0c;无法通过条件frontrear来判别队列是"空"还是"满"。 解决这个问题的方法至少有两种: ① 另设一布尔变量…

测试用例设计方法-探索性测试

生活犹如骑单车&#xff0c;唯有前进才能保持平衡。大家好&#xff0c;今天给大家分享一下关于探索性测试的方法&#xff0c;在探索性测试中更加考验测试人员的经验&#xff0c;所以我们在平时的测试工作中一定要多记录、多总结、多复盘&#xff0c;对于经常出现的bug深究其根本…

【JS】js数字转k、w结尾 | 1000 = 1k

问题 数字转k、w结尾 如&#xff1a;10001k 100001w 码 /*** 数字转k,w* param {Number} num * returns String*/ const numberTokw num > {if (num < 1000) return numlet endStr w,numVal 10000;if (num > 999 && num < 10000) {endStr knumVal …

VR全景:为户外游玩体验插上科技翅膀

随着VR全景技术的愈发成熟&#xff0c;无数人感到惊艳&#xff0c;也让各行各业看到了一片光明的发展前景。尤其是越来越多的文旅景区开始引入VR全景技术&#xff0c;相较于以往的静态风景图&#xff0c;显然现在的VR全景结合了动态图像和声音更加吸引人。 VR全景技术正在逐步改…