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

代码解析

相关推荐
蓝色的杯子7 分钟前
Python面试30分钟突击掌握-LeetCode3-Linked list
python·leetcode·面试
像素猎人8 分钟前
map<数据类型,数据类型> mp和unordered_map<数据类型,数据类型> ump的讲解,蓝桥杯OJ4567最大数目
c++·算法·蓝桥杯·stl·map
Narrastory9 分钟前
Note:强化学习(一)
人工智能·算法·强化学习
Cat_Rocky19 分钟前
redis数据库基础学习
数据库·redis·学习
星幻元宇VR20 分钟前
VR星际行走平台|沉浸式科普教育与未来体验的新入口
科技·学习·安全·生活·vr
沐雪轻挽萤20 分钟前
1. C++17新特性-序章
java·c++·算法
雾喔24 分钟前
【学习笔记2】快速上手调用 AI API & Prompt Engineering
人工智能·笔记·学习
呆呆在发呆.27 分钟前
JavaEE初阶
java·jvm·网络协议·学习·udp·java-ee·tcp
航Hang*28 分钟前
Windows Server 配置与管理——第9章:配置DHCP服务器
运维·服务器·windows·学习
郝学胜-神的一滴29 分钟前
从链表到二叉树:树形结构的入门与核心性质解析
数据结构·c++·python·算法·链表