300. 最长递增子序列
动态规划:
java
class Solution {
public int lengthOfLIS(int[] nums) {
//子问题以nums[i]结尾的最长子序列长度
//如果nums[j]<nums[i],所以nums[i]可以接在nums[j]后面
//状态方程:dp[i] = Math.max(dp[i],dp[j]+1)
//从左到右
int n = nums.length;
int[] dp = new int[n];
Arrays.fill(dp,1);
int ans = 1;
for(int i = 0;i<n;i++){
for(int j = 0;j<i;j++){
if(nums[j]<nums[i]){
dp[i] = Math.max(dp[i],dp[j]+1);
}
}
//比较得答案
ans = Math.max(ans,dp[i]);
}
return ans;
}
}
时间复杂度:O(N²)
空间复杂度:O(N)