LC.300-最长递增子序列长度题解

public class LongestIncreaseLength {
    public int lengthOfLIS(int[] nums) {
        //单串问题
        if(nums==null || nums.length==0){
            return 0;
        }
        int res=-1;
        int dp[]=new int[nums.length];
        dp[0]=1;
        for(int i=0;i<nums.length;i++){
            int MaxLen=1;//因为对于单个元素无论如何最低都是1了
            for(int j=0;j<i;j++){//搜索前面O(n)种情况,因为他是不连续的,可以从前面的i个种作为他的上一个元素
                if(nums[i]>nums[j]){//符合递增特点
                    MaxLen=Math.max(dp[j],MaxLen);
                    dp[i]=MaxLen+1;
                    //在递增特性中符合的选择最长序列并基础上加一
                }
            }
            res=Math.max(dp[i],res);//刷新最大值
        }
        return res;//返回最大值
    }
}

这个是一个DP的单串问题,前置状态属于前O(n)个状态型,需要在前O(n)个状态中取最小值
dp公式:DP[n]=min(DP[n-1]...DP[0])+1 && nums[i]>nums[j]
时间复杂度为O(n^2);

全部评论

相关推荐

菠落蜜:这个是系统自动投的,不是hr主动打招呼。更抽象的还有ai回复
我的秋招日记
点赞 评论 收藏
分享
10-09 16:12
门头沟学院 Java
帅宇殿下:佬,简历写的什么
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务