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

【最长递增子序列】【LeetCode算法】【c++】【动态规划】

文章目录

      • LeetCode 300题 最长递增子序列
        • 题目要求
        • 思路
        • 图示
        • 代码
        • 测试结果
        • 如果有误还请各位大佬指正

LeetCode 300题 最长递增子序列

题目要求

给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。

子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。

示例 1:

输入:nums = [10,9,2,5,3,7,101,18]
输出:4
解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。

示例 2:

输入:nums = [0,1,0,3,2,3]
输出:4

示例 3:

输入:nums = [7,7,7,7,7,7,7]
输出:1

提示:

  • 1 <= nums.length <= 2500
  • -104 <= nums[i] <= 104
思路

首先这道题目用到了动态规划的思想,是经典的动态规划题目

我们可以选择遍历数组的同时,用dp数组来记录每个数字包括自己在内递增序列中数字的个数,假如序列为【1,3,2,4】,那么dp数组中应该是【1,2,2,3】,下面通过图示进一步解释。

图示

下面我画出了几步帮助理解

用到了两层for循环,双指针,i指针一直进行++操作,j指针每次从第一个元素开始和a[i]进行比较,如果a[i]大于a[j],那么dp[i]进行更新,最后找出dp数组中最大值即可。

在这里插入图片描述

代码
// 最长上升子序列
#include <iostream>
using namespace std;

const int N = 1000;
int a[N], dp[N];

int main()
{
    int n;
    cin >> n;
    for (int i = 0; i < n; i++)
        cin >> a[i];
    int ans = 0;
    for (int i = 0; i < n; i++)
    {
        dp[i] = 1;
        for (int j = 0; j < i; j++)
        {
            if (a[i] > a[j])
            {
                dp[i] = max(dp[i], dp[j] + 1);
            }
        }

        ans = max(ans, dp[i]);
    }
    cout << ans << endl;
    system("pause");
    return 0;
}
测试结果

在这里插入图片描述

如果有误还请各位大佬指正

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

相关文章:

  • mac安装mysql之后报错zsh: command not found: mysql !
  • MybatisPlus中的customSqlSegment动态拼接where条件
  • 30天学习Java学前准备2——JAVA中的三种注释
  • 【DuodooTEKr】物联DTU设备与Odoo18 Maintenance设备模块IOT模块集成技术方案
  • 记Oracle Exadata X9M更换闪存遇到的问题
  • 深入理解 HTML 文本格式化
  • Spring中复杂对象的创建方式:FactoryBean、实例工厂与静态工厂全解析
  • 2025-3-12 leetcode刷题情况(贪心算法--区间问题)
  • 使用Shotcut为视频添加马赛克效果
  • 【第23节】C++设计模式(行为模式)-Interpreter(解释器)模式
  • AJAX的作用
  • ESP32驱动OV3660摄像头实现yoloV5物体分类(摄像头支持红外夜视、边缘AI计算)
  • MySQL中IN关键字与EXIST关键字的比较
  • 2.5 Spring Boot异常处理全局化:@ControllerAdvice实战
  • c# 2025/3/12 周三
  • 深入理解分布式锁——以Redis为例
  • C# 常量与变量:写给小白的入门指南
  • 【Rust并发编程深度解析:内存模型与异步运行时实现原理】
  • 论文阅读 Quantum Convolutional neural network
  • OpenCV连续数字识别—可运行验证