leetcode 300:最长上升子序列
题目描述:给定一个无序的整数数组,找到其中最长上升子序列的长度。最长上升子序列不要求是连续的。
输入: [10,9,2,5,3,7,101,18]
输出: 4
解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。
解题步骤:
1、 状态定义:采用一维数组dp[i]来表示代表 nums 前i个数字的最长子序列长度,其中nums[i]表示上升过程中的最大值
2、 状态转移方程:
如果nums[j] < nums[i],就dp[i]=max(dp[i],dp[j]+1)
3、 初始化:初始dp[i]全部为1
4、 输出:输出dp数组中的最大值
代码:
public int lengthOfLIS(int[] nums) {
if(nums.length==0)
return 0;
int[] dp = new int[nums.length];
Arrays.fill(dp, 1);
int ret = 1;
for (int i = 1; i < dp.length; i++) {
for (int j = 0; j < i; j++) {
if(nums[i] > nums[j]) {
dp[i] = Math.max(dp[i], dp[j]+1);
}
}
ret = Math.max(ret, dp[i]);
}
System.out.println(Arrays.toString(dp));
return ret;
}