力扣300. 最长递增子序列

动态规划

  • 思路:
    • 假设 dp[i] 为前 i 个元素构成的最长递增子序列的个数,包含 nums[i];
    • 则 dp[i] 构成序列上一个元素 nums[j] 构成最长递增子序列 dp[j],则 dp[i] = dp[j] + 1;
    • 如果动态取 j ∈ [0, i - 1],则选取其中最长递增子序列值中最大的,其值 + 1 来更新 dp[i] 的值;
cpp 复制代码
class Solution {
public:
    int lengthOfLIS(vector<int>& nums) {
        int size = (int)nums.size();
        if (size == 0) {
            return 0;
        }

        std::vector<int> dp(size, 0);
        for (int i = 0; i < size; ++i) {
            dp[i] = 1;
            for (int j = 0; j < i; ++j) {
                if (nums[j] < nums[i]) {
                    dp[i] = std::max(dp[i], dp[j] + 1);
                }
            }
        }

        return *std::max_element(dp.begin(), dp.end());
    }
};
相关推荐
m0_518019481 分钟前
C++中的装饰器模式变体
开发语言·c++·算法
xushichao19897 分钟前
高性能密码学库
开发语言·c++·算法
m0_5180194810 分钟前
C++代码混淆与保护
开发语言·c++·算法
m0_5698814712 分钟前
C++中的智能指针详解
开发语言·c++·算法
blackicexs15 分钟前
第九周第三天
算法
自信1504130575925 分钟前
选择排序算法
c语言·数据结构·算法·排序算法
2401_8735449226 分钟前
基于C++的游戏引擎开发
开发语言·c++·算法
add45a27 分钟前
C++中的组合模式
开发语言·c++·算法
無限進步D29 分钟前
简单贪心算法 cpp
c++·算法·贪心算法·蓝桥杯·入门·竞赛
2501_9454235431 分钟前
模板编程中的SFINAE技巧
开发语言·c++·算法