300. 最长递增子序列
给你一个整数数组 nums
,找到其中最长严格递增子序列的长度。
子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7]
是数组 [0,3,1,6,2,2,7]
的子序列
示例 1:
输入:nums = [10,9,2,5,3,7,101,18] 输出:4 解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。
示例 2:
输入:nums = [0,1,0,3,2,3] 输出:4
示例 3:
输入:nums = [7,7,7,7,7,7,7] 输出:1
提示:
1 <= nums.length <= 2500
-104 <= nums[i] <= 104
int lengthOfLIS(int* nums, int numsSize) {
int dp[2500] ;//数组容量太大时,初始化需注意,若写成dp[2500] = {1};会报错
int i,j,max=1;
dp[0]=1;
for(i=1;i<numsSize;i++){
dp[i] = 1;//初始化用循环较稳妥
for(j=0;j<i;j++){
//递推公式
if(nums[j] < nums[i]){
dp[i] = (dp[i]>(dp[j]+1) ? dp[i] : (dp[j]+1));
}
}
//return不是dp[numsize-1],而是遍历找出最大的dp[i]
max = (max > dp[i] ? max : dp[i]);
}
return max;
}