【leetcode】300. 最长递增子序列

int lengthOfLIS(int* nums, int numsSize){
    int len = 1, n = numsSize;
    if (n == 0) {
        return 0;
    }
    int* d= (int*)calloc(n+1,sizeof(int));
    d[len] = nums[0];
    for (int i = 1; i < n; ++i) {
        if (nums[i] > d[len]) {
            d[++len] = nums[i];
        } else {
            int l = 1, r = len, pos = 0; // 如果找不到说明所有的数都比 nums[i] 大,此时要更新 d[1],所以这里将 pos 设为 0
            while (l <= r) {
                int mid = (l + r) >> 1;
                if (d[mid] < nums[i]) {
                    pos = mid;
                    l = mid + 1;
                } else {
                    r = mid - 1;
                }
            }
            d[pos + 1] = nums[i];
        }
    }
    return len;
}
原文地址:https://www.cnblogs.com/ganxiang/p/14207510.html