LintCode 最长上升子序列 动态规划

题目 : 原题地址

给定一个整数序列,找到最长上升子序列(LIS),返回LIS的长度。

说明

最长上升子序列的定义:

最长上升子序列问题是在一个无序的给定序列中找到一个尽可能长的由低到高排列的子序列,这种子序列不一定是连续的或者唯一的。

样例

给出 [5,4,1,2,3],LIS 是 [1,2,3],返回 3
给出 [4,2,4,5,3,7],LIS 是 [2,4,5,7],返回 4


 
代码:很简单的动态规划,,没啥说的
public int longestIncreasingSubsequence(int[] nums) {
        if(nums.length==0)
            return 0;
        
        int[] dp = new int[nums.length];

        for (int i = 0; i < nums.length; i++) {
            dp[i] = 1;
            for (int j = 0; j < i; j++) {
                if (nums[j] < nums[i] && dp[j] + 1 > dp[i])
                    dp[i] = dp[j] + 1;
            }
        }

        int max = 1;
        for (int i : dp)
            max = max > i ? max : i;
        return max;
    }

 

posted @ 2017-09-21 15:11  夏天的冬天  阅读(122)  评论(0编辑  收藏  举报