力扣第300题 最长上升子序列

Posted woodjay

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了力扣第300题 最长上升子序列相关的知识,希望对你有一定的参考价值。

力扣第300题 最长上升子序列

技术图片

技术图片

class Solution {
    public:
    int lengthOfLIS(vector<int>& nums) {
        int size = nums.size();
        if (size == 0)
        {
            return 0;
        }
        vector<int> vec;
        int len = 1;
        vec.push_back(nums[0]);
        for (int i = 1; i < size; i++)
        {
            if (vec[len - 1] < nums[i])
            {
                vec.push_back(nums[i]);
                len++;
            }
            else
            {
                // 要替换掉在vec数组中第一个大于nums[i]的数, 此处边界问题需要考虑一下
                // right = len - 2是因为vec[len - 1] >= nums[i]所以不用考虑len - 1
                int left = 0, right = len - 2, pos = -1;
                while (left <= right)
                {
                    int mid = left + ((right - left) >> 1);
                    if (vec[mid] < nums[i])
                    {
                        pos = mid;
                        left = mid + 1;
                    }
                    else
                    {
                        right = mid - 1;
                    }
                }
                vec[pos + 1] = nums[i];
            }
        }
        return len;
    }
};

以上是关于力扣第300题 最长上升子序列的主要内容,如果未能解决你的问题,请参考以下文章

leetcode-300最长上升子序列

300. 最长上升子序列-动态规划

300. 最长上升子序列-动态规划

leetcode 300. 最长上升子序列

LeetCode刷题 --动态规划练习题 --300 最长上升子序列

力扣之最长上升子序列 2022-02-28~03-06