码迷,mamicode.com
首页 > 其他好文 > 详细

最长递增子序列(LIS)

时间:2020-05-09 23:42:07      阅读:94      评论:0      收藏:0      [点我收藏+]

标签:create   system   ati   script   等于   main   ++   数组   out   

代码

/**
 * @Classname LIS
 * @Description 最长递增子序列(LIS)
 * @Date 2020/5/9 下午 9:09
 * @Created by jerry
 */
public class LIS {
    public static int LIS(int[] nums) {
        if(nums.length <= 1){
            return nums.length;
        }
        //最大长度
        int max = 1;
        //dp[i]表示第i长的子序列,最后的元素
        int[] dp = new int[nums.length + 1];
        dp[1] = nums[0];
        for(int i = 1;i < nums.length;i++){
            //如果当前元素比最大的那个子串的最后一个元素还要大
            //那就直接长度加一,新子串的最后一个元素为当前元素
            if(nums[i] > dp[max]){
                dp[++max] = nums[i];
            }else if(nums[i] < dp[max]){
                //如果当前元素比最大的那个子串的最后一个元素要小
                //那就要更新dp数组,保证每一个子串都是最优解
                for(int j = 1 ;j <= max; j++){
                    //因为是递增,所以是<=,在将等于的时候直接终止循环
                    if(nums[i] <= dp[j]){
                        dp[j] = nums[i];
                        break;
                    }
                }
            }
        }
        for (int i = 1; i <= max; i++) {
            System.out.print(dp[i] + " ");
        }
        System.out.println();
        return max;
    }

    public static void main(String[] args) {
        int[] nums = new int[]{10,9,2,5,3,7,101,18};
        System.out.println(LIS(nums));
    }
}

最长递增子序列(LIS)

标签:create   system   ati   script   等于   main   ++   数组   out   

原文地址:https://www.cnblogs.com/melodyjerry/p/12860349.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!