最长递增子序列
给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。
子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。
class Solution {
/**
* 思路分析:
* 1 时间复杂度O(n^2)
* 返回最长递增子序列的长度dp[i]:表示以i为结尾的最长递增子序列
* 转移方程:dp[i] = Math.max(dp[i], dp[j] + 1); j表示从i开始的大于nums[i]的数字下标
* @param nums
* @return
*/
public int lengthOfLIS(int[] nums) {
int[] dp = new int[nums.length];
// 初始化
Arrays.fill(dp, 1);
int max = 0;
for(int i = 0; i < nums.length; i++){
for(int j = 0; j < i; j++){
if(nums[j] < nums[i]){
dp[i] = Math.max(dp[i], dp[j] + 1);
}
}
max = Math.max(dp[i], max);
}
return max;
}
}