【力扣】300. 最长递增子序列(DFS+DP两种方法实现)

题目传送

原题目链接

最长递增子序列[DFS 方法]

DFS方法思路图

在这里插入图片描述

思路简述

  • 对于序列中的每一个数字只有选择和不选择两种状态
  • 如果选择了,方案数就加一
  • 否则方案不变
  • 进入下一次选择则 i 后移
  • i 越界时更新方案的最大值即可

代码

#include <iostream>
//最长递增子序列
using namespace std

class Solution {
public:
    int size;
    int res;
    vector<int> arr;
    int lengthOfLIS(vector<int>& nums) {
        res = 0;
        size = nums.size();
        arr = nums;
        dfs(0, INT_MIN, 0);
        return res;
    }
    inline void dfs(int i, int pre, int count) {
        if (i == size) {
            res = max(count, res);          //更新最大值
            return;
        }
        if (arr[i] > pre) {
            dfs(i+1, arr[i], count+1);      //选择
        }
        dfs(i+1, pre, count);               //不选择
    }
};

大家可以自行考虑有没有优化的方法

最长递增子序列[DP]方法

DP方法思路图

在这里插入图片描述

思路简述

  • i 枚举每一个数字
  • j每次枚举找到 i 位置前所有比 i 位置数小的数字的dp[j]最大值
  • 如果dp[j] > dp[i] –> dp[i] = dp[j] + 1

从而推导出状态转移方程:
前提条件: dp[i] > dp[j]

dp[i] = max(dp[i], dp[j] + 1)

代码方案

class Solution {
public:
    vector<int> dp;
    int lengthOfLIS(vector<int>& nums) {
        int size = nums.size();
        dp.resize(size, 1);
        for (int i = 0; i < size; i++) {
            for (int j = 0; j < i; j++) {
                if (nums[i] > nums[j]) {
                    dp[i] = max(dp[j] + 1, dp[i]);
                }
            }
        }
        int res = 0;
        for (int i = 0; i < size; i++) {
            res = max(res, dp[i]);
        }
        return res;
    }
};

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-30 19:40:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-30 19:40:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-30 19:40:01       82 阅读
  4. Python语言-面向对象

    2024-03-30 19:40:01       91 阅读

热门阅读

  1. 设置docker开机自启动,并设置容器自动重启

    2024-03-30 19:40:01       44 阅读
  2. 题目:用*号输出字母C的图案。

    2024-03-30 19:40:01       44 阅读
  3. linux下tar命令的压缩和解压详细使用方法

    2024-03-30 19:40:01       45 阅读
  4. 45 对接海康视频九宫格的实现

    2024-03-30 19:40:01       39 阅读
  5. python中的元类

    2024-03-30 19:40:01       39 阅读
  6. rust - 读取windows注册表的值

    2024-03-30 19:40:01       46 阅读
  7. 互联网摸鱼日报(2024-03-29)

    2024-03-30 19:40:01       48 阅读
  8. Unity 常见的图像压缩格式优缺点

    2024-03-30 19:40:01       48 阅读
  9. 初识区块链

    2024-03-30 19:40:01       38 阅读