思路
- 动态规划
dp[i]
是以nums[i]
为结束元素的递增子序列的长度,dp[i] = max(dp[i],dp[j]+1) when nums[i] > nums[j]
.- 最大值不是最后一个,是可能中间的某个元素结尾的序列
int lengthOfLIS(int* nums, int numsSize){
int dp[numsSize] ;
int i;
int max = 1;
for(i=0;i<numsSize;i++) {
dp[i]=1;
}
for (i = 1; i < numsSize; i++) {
for (int j = 0; j < i; j++) {
if(nums[i] > nums[j]){
dp[i] = fmax(dp[i],dp[j]+1);
}
max = fmax(max, dp[i]);
}
}
return max;
}