int lengthOfLIS(vector<int>& nums) { int Len = nums.size(); if(Len == 0 ) return 0; int dp[Len+10]; // dp[i] 表示所有长度为i+1的子序列末尾元素的最小值 int ret = 0; memset(dp,0,sizeof(dp)); dp[0] = nums[0]; for(int i=1;i<Len;i++) { if(nums[i] > dp[ret]) dp[++ret] = nums[i]; else { int pos = lower_bound(dp,dp+ret,nums[i])-dp; dp[pos] = nums[i]; } } return ret+1; }
原文:https://www.cnblogs.com/z1141000271/p/12705748.html