问题描述:
解题思路:
采用动态规划解法,定义 dp数组,dp[i]是nums[i]结尾的最长递增咨询列的长度。base case nums只有一个元素,最长递增子序列是自己。dp[0] = 1;求整个数组的最长子序列就是求dp数组最大值。找出状态转移方程。f(n)=maxf(i)+1 其中 i<n 且 a[i]<a[n]。
解题答案:
class Solution {
public int lengthOfLIS(int[] nums) {
int[]dp = new int[nums.length];
Arrays.fill(dp, 1);
for(int i = 0;i<nums.length;i++){
for(int j = 0;j<i;j++){
if(nums[i]>nums[j]){
dp[i] = Math.max(dp[i],dp[j]+1);
}
}
}
int res = 0;
for(int i = 0;i<dp.length;i++){
res = Math.max(res,dp[i]);
}
return res;
}
}