【贪心算法第五弹——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();
    }
};

代码解析

相关推荐
我能坚持多久几秒前
C++入门基础知识
开发语言·c++·学习
yuanyuan2o27 分钟前
你可能需要的算法思想——动态规划
数据结构·python·算法·动态规划
十五年专注C++开发7 分钟前
Cocos2d - x: 一款开源跨平台 2D 游戏框架
运维·c++·游戏·开源·游戏引擎·cocos2d
如雨随行20207 分钟前
【Vim】学习笔记(9)命令模式
笔记·学习·vim
唯创知音9 分钟前
WTK6900FC鼾声识别芯片:基于DNN-HMM算法的高性能鼾声识别检测处理方案
人工智能·算法·dnn·鼾声识别芯片·鼾声检测芯片
Tisfy10 分钟前
LeetCode 3474.字典序最小的生成字符串:暴力填充
算法·leetcode·字符串·题解
charlie11451419111 分钟前
2026年正点原子开发板移植方案——从0开始的Rootfs之路(5)WSL + NFS 网络启动踩坑记:从挂载失败到成功启动的完整历程
linux·网络·驱动开发·学习·嵌入式·嵌入式linux
头疼的程序员12 分钟前
计算机网络:自顶向下方法(第七版)第七章 学习分享(四)
网络·学习·计算机网络
草莓熊Lotso12 分钟前
MySQL 索引特性与性能优化全解
android·运维·数据库·c++·mysql·性能优化
Alicx.12 分钟前
map容器是个好东西
数据结构·算法·蓝桥杯