0
点赞
收藏
分享

微信扫一扫

LeetCode 300.最长递增子序列

1.题目:

给你一个整数数组 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



2.代码:

class Solution {
    public int lengthOfLIS(int[] nums) {
       int[] dp = new int[nums.length];//dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度
       Arrays.fill(dp, 1);//全部都初始化为1,因为不管以哪一个为尾,长度至少都是1
       for(int i=0;i<nums.length;i++){//遍历数组
           for(int j=0;j<i;j++){//注意限制条件是小于i
               if(nums[i]>nums[j]){//注意限制条件,这样才可以是一个递增子序列
                   dp[i]=Math.max(dp[j]+1,dp[i]);//递推公式,d[i]表示之前的递增子序列的长度
               }
           }
       }
       int max=0;//最后还是要遍历整个dp数组,才能找到最长的递增子序列
       for(int i=0;i<dp.length;i++){
           if(dp[i]>max) max=dp[i];
           System.out.println(dp[i]);
       }
       return max;
    }
}

































举报

相关推荐

0 条评论