Java实现给定一个无序的整数数组,找到其中最长上升子序列的长度。
程序员文章站
2022-07-15 16:34:29
...
输入:[10,9,2,5,3,7,101,18]
输出: 4 解释: 最长的上升子序列是[2,3,7,101],
它的长度是4
思路非常简单哈:
1 首先开辟一个新数组 ,长度等于nums //用来存储没一个值得最大上升子序列数目
2 首先把新数组的每一个值赋值为1 ,//最小上升子序列是他自己 也就是1
3 遍历i i前面的如果有比他小的,记录下 更新到新数组中+1, 如果小于前面的子序列长度, 那么取前面最长的子序列
4 最后返回新数组中最大值就好了 也可以放到第2个for循环中, 不断更新最大值 最后直接输出了
class Solution {
public int lengthOfLIS(int[] nums) {
if(nums.length==0){
return 0;
}
int[] dp=new int[nums.length];
Arrays.fill(dp,1);
int result=1;
for(int i=0;i<nums.length;i++){
for(int j=0;j<i;j++){
if(nums[j]<nums[i]){
dp[i]=Math.max(dp[i],dp[j]+1);
}
result=Math.max(result,dp[i]);
}
}
return result;
}
}
By CaesarChang 合作: aaa@qq.com
~关注我 带你看更多精品技术和面试必备
上一篇: 【剑指Offer】连续子数组的最大和
下一篇: 剑指offer-连续子数组的最大和