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

代码解析

相关推荐
Dream it possible!7 分钟前
LeetCode 面试经典 150_二叉搜索树_二叉搜索树的最小绝对差(85_530_C++_简单)
c++·leetcode·面试
xxxxxxllllllshi9 分钟前
【LeetCode Hot100----14-贪心算法(01-05),包含多种方法,详细思路与代码,让你一篇文章看懂所有!】
java·数据结构·算法·leetcode·贪心算法
前端小L12 分钟前
图论专题(二十二):并查集的“逻辑审判”——判断「等式方程的可满足性」
算法·矩阵·深度优先·图论·宽度优先
铁手飞鹰18 分钟前
二叉树(C语言,手撕)
c语言·数据结构·算法·二叉树·深度优先·广度优先
cmcm!28 分钟前
学习笔记1
数据库·笔记·学习
Hcoco_me1 小时前
YOLO目标检测学习路线图
学习·yolo·目标检测
麦烤楽鸡翅1 小时前
简单迭代法求单根的近似值
java·c++·python·数据分析·c·数值分析
专业抄代码选手2 小时前
【Leetcode】1930. 长度为 3 的不同回文子序列
javascript·算法·面试
[J] 一坚2 小时前
深入浅出理解冒泡、插入排序和归并、快速排序递归调用过程
c语言·数据结构·算法·排序算法
czlczl200209252 小时前
算法:二叉搜索树的最近公共祖先
算法