dp[i]表示有i个字符时最长递增子序列的最小末尾。长度为i的最长递增子序列可能有多个,但是最小末尾只能有一个。例如12378,长度为4的有1237和1238,但是最小的就是7。这么做的目的是为了能让每次更新dp的时候能用更高的效率。传统的dp手段每遍历一次就会遍历一次dp数组,但是用这种最小末尾的可以用二分的方式更新这个dp,因此复杂度就变成了nlogn
class Solution {
public:
int lengthOfLIS(vector& nums) {
int n = static_cast(nums.size());
vectordp(n+1,INT_MAX);
dp[1] = nums[0];
for(int i=1;i class Solution {
public:
int lengthOfLIS(vector& nums) { int n = static_cast(nums.size());
vectordp;
dp.push_back(nums[0]);
for(int i=1;i