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

代码解析

相关推荐
YJlio10 小时前
第9章小结(9.19):Sysinternals 安全工具组合拳与脚本清单
java·学习·平面
xian_wwq10 小时前
【学习笔记】网络安全死于平庸
笔记·学习·安全防护
程序员-King.10 小时前
day110—同向双指针(数组)—最多K个重复元素的最长子数组(LeetCode-2958)
算法·leetcode·双指针
做怪小疯子10 小时前
LeetCode 热题 100——二叉树——二叉树的右视图
算法·leetcode·职场和发展
Swift社区10 小时前
LeetCode 442 - 数组中重复的数据
算法·leetcode·职场和发展
努力学算法的蒟蒻10 小时前
day25(12.5)——leetcode面试经典150
算法·leetcode·职场和发展
xlq2232210 小时前
23.二叉树搜索树(下)
数据结构·c++·算法
d111111111d10 小时前
在STM32F103C8T6中什么是读写寄存器模型,有什么用,可以干什么,详细解释。
笔记·stm32·单片机·嵌入式硬件·学习
金士顿10 小时前
DI滤波学习
学习
qq_4017808210 小时前
1.信号完整性(方波信号的频谱特征)
学习