【贪心算法第五弹——300.最长递增子序列】

目录

1.题目解析

题目来源

测试用例

2.算法原理

3.实战代码

代码解析


注意本题还有一种动态规划的解决方法,贪心的方法就是从动态规划的方法总结而来,各位可以移步博主的另一篇博客先了解一下: 动态规划-子序列问题------300.长递增子序列

1.题目解析

题目来源

|-----------------------------------------------------------------------------------------------------------|
| 300.最长递增子序列------力扣 |

测试用例

2.算法原理

贪心思路

具体算法

此时的时间复杂度是O(N^2),与动态规划一样,那么我们就需要继续优化,这里插入dp表后判断插入位置可以使用二分查找来进行优化,优化后时间复杂度就是O(N*logN)

3.实战代码

cpp 复制代码
class Solution 
{
public:
    int lengthOfLIS(vector<int>& nums) 
    {
        int n = nums.size();
        vector<int> dp;
        dp.push_back(nums[0]);
        for(int i = 1;i < n;i++)
        {
            if(nums[i] > dp.back())
            {
                dp.push_back(nums[i]);
            }
            else
            {
                int left = 0,right = dp.size();
                while(left < right)
                {
                    int mid = (left + right) >> 1;
                    if(nums[i] > dp[mid])  left = mid + 1;
                    else right = mid;
                }
                dp[left] = nums[i];
            }
        }
        return dp.size();
    }
};

代码解析

相关推荐
惊岁晚3 分钟前
【实践记录】github仓库的更新
算法·容器·r语言·github
独好紫罗兰9 分钟前
C++信息学奥赛一本通-第一部分-基础一-第一章
c++·算法
郝学胜-神的一滴17 分钟前
对于类似std::shared_ptr但有可能空悬的指针使用std::weak_ptr: Effective Modern C++ 条款20
开发语言·c++·程序人生·系统架构
阑梦清川19 分钟前
算法竞赛---宽度优先遍历求解最短路径问题(方向数组里面是4个元素)
算法
想睡觉的树19 分钟前
windows双系统下ubuntu20.04安装教程
学习
wuxuanok29 分钟前
八股——Kafka相关
java·笔记·后端·学习·kafka
Ghost-Face32 分钟前
《算法导论》笔记——循环不变式及插入排序证明
算法
不可描述的两脚兽33 分钟前
学习笔记《区块链技术与应用》第六天 问答 匿名技术 零知识证明
笔记·学习·区块链
qq_3863226941 分钟前
华为网路设备学习-26(BGP协议 二)路径属性
学习
Elohim8151 小时前
FreeRTOS学习(一)
学习·freertos