当前位置: 首页 > article >正文

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

目录

1.题目解析

题目来源

测试用例

2.算法原理

3.实战代码

代码解析


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

1.题目解析

题目来源

300.最长递增子序列——力扣

测试用例

2.算法原理

 

贪心思路 

具体算法 

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

3.实战代码

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();
    }
};

代码解析


http://www.kler.cn/a/411051.html

相关文章:

  • 第六届国际科技创新学术交流大会暨新能源科学与电力工程国际(NESEE 2024)
  • 1138:将字符串中的小写字母转换成大写字母
  • Github 2024-11-26 Python开源项目日报Top10
  • 深度学习:GPT-1的MindSpore实践
  • vue3 uniapp 扫普通链接或二维码打开小程序并获取携带参数
  • 下载并安装Visual Studio 2017过程
  • QUICK调试camera-xml解析
  • QT QToolButton控件 全面详解
  • Scala—Collections集合概述
  • goframe框架bug-记录
  • 如何提升编程能力第二篇
  • 关于网络安全攻防知识
  • [CA] 读懂core.cpp -3 Core::decode
  • docker 的各种操作
  • 防御网络攻击的创新策略
  • IP反向追踪技术,了解一下?
  • vim 如何高亮/取消高亮
  • MySQL系列之数据类型(Numeric)
  • 【计算机网络】C/C++实现解析Wireshark离线数据包,附源码
  • Java基础.数组排序(冒泡排序和选择排序)数组与遍历
  • JavaScript HTML DOM 实例
  • windowsC#-在异步任务完成时处理
  • wangEditor富文本插入自定义应用
  • 大厂也在用的分布式链路追踪:TraceIdFilter + MDC + Skywalking
  • DAPP分币系统开发的安全性分析
  • C++中的链式操作原理与应用(一)