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

代码解析

相关推荐
香蕉鼠片几秒前
第三大的数
数据结构·算法·leetcode
鱼鳞_几秒前
Java学习笔记_Day21(Set)
java·笔记·学习
汀、人工智能1 分钟前
[特殊字符] 第28课:相交链表
数据结构·算法·链表·数据库架构··相交链表
鹅天帝1 分钟前
20260407网安学习日志——序列化漏洞
前端·学习·web安全·网络安全·xss
charlie1145141912 分钟前
现代Qt开发——0.1——如何在IDE中配置Qt环境?
开发语言·c++·ide·qt·嵌入式
何如呢4 分钟前
FPGA初学习2
学习
计算机安禾4 分钟前
【数据结构与算法】第32篇:交换排序(一):冒泡排序
c语言·数据结构·c++·算法·链表·排序算法·visual studio code
头疼的程序员5 分钟前
计算机网络:自顶向下方法(第七版)第八章 学习分享(二)
学习·计算机网络
世人万千丶6 分钟前
开源鸿蒙跨平台Flutter开发:幼儿园成语序列与海马体印迹锚定引擎-突触链式网络渲染架构
学习·flutter·开源·harmonyos·鸿蒙
迷路爸爸1806 分钟前
Docker 入门学习笔记 02:基础命令、前后台运行,以及 attach、logs、exec 的区别
笔记·学习·docker