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; }