【面试经典150 | 】最长递增子序列

Tag

【动态规划】【数组】


题目来源

300. 最长递增子序列


解题思路

方法一:动态规划

定义状态

dp[i] 表示以位置 i 对应整数为末尾的最长递增子序列的长度。

状态转移

我们从小到大计算 dp 数组的值,在计算 dp[i] 之前,我们已经计算出 dp[0], dp[1], ..., dp[i-1] 的值,有状态转移方程:

d p [ i ] = m a x ( d p [ i ] , d p [ j ] + 1 ) ,其中 0 ≤ j < i 且 n u m s [ j ] < n u m s [ i ] dp[i] = max(dp[i], dp[j] + 1),其中 0 \le j < i 且 nums[j] < nums[i] dp[i]=max(dp[i],dp[j]+1),其中0j<inums[j]<nums[i]

在计算状态 dp[i] 时,更新答案 max_length

base case

对于以 nums[i] 结尾的最长递增子序列,我们均初始化为 1。

最后返回

最后直接返回维护的最长递增子序列的长度 max_length

实现代码

class Solution {
public:
	int lengthOfLIS(vector<int>& nums) {
        int n = nums.size();
		vector<int> dp(n + 1, 1);
		int max_length = 0;

        if(n <= 1) return n;
        
		for (int i = 1; i < nums.size(); ++i) {
			for (int j = 0; j < i; ++j) {
				if (nums[j] < nums[i]) {
					dp[i] = max(dp[i], dp[j] + 1);
				}
			}
			max_length = max(max_length, dp[i]);
		}
		return max_length;
	}
};

复杂度分析

时间复杂度: O ( n 2 ) O(n^2) O(n2) n n n 是数组 nums 的长度。我们一共需要计算 O ( n ) O(n) O(n) 个状态,每个状态需要 O ( n ) O(n) O(n) 的时间遍历 dp[0, ..., i-1] 的状态,所以时间复杂度为 O ( n 2 ) O(n^2) O(n2)

空间复杂度: O ( n ) O(n) O(n)


写在最后

如果您发现文章有任何错误或者对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。

如果大家有更优的时间、空间复杂度的方法,欢迎评论区交流。

最后,感谢您的阅读,如果有所收获的话可以给我点一个 👍 哦。

相关推荐

  1. 面试算法-43-递增序列

    2024-03-29 00:42:02       19 阅读
  2. 面试算法-135-递增序列的个数

    2024-03-29 00:42:02       14 阅读
  3. LeetCode 300 递增序列

    2024-03-29 00:42:02       39 阅读
  4. Leetcode 300 递增序列

    2024-03-29 00:42:02       32 阅读
  5. 【LeetCode-300.递增序列

    2024-03-29 00:42:02       14 阅读
  6. LeetCode 300. 递增序列

    2024-03-29 00:42:02       7 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-29 00:42:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-29 00:42:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-29 00:42:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-29 00:42:02       18 阅读

热门阅读

  1. webpack快速基础

    2024-03-29 00:42:02       18 阅读
  2. Linux双向链表相关API的使用及事例Demo

    2024-03-29 00:42:02       17 阅读
  3. 添加了ssh keys还是无法git push

    2024-03-29 00:42:02       21 阅读
  4. 数据库底层原理

    2024-03-29 00:42:02       17 阅读
  5. mysql null值相减还是null

    2024-03-29 00:42:02       17 阅读
  6. 电机转速&转矩计算公式

    2024-03-29 00:42:02       29 阅读
  7. Go语言教程和案例

    2024-03-29 00:42:02       16 阅读
  8. 2020校招面试

    2024-03-29 00:42:02       19 阅读
  9. 程序员35岁会失业吗?

    2024-03-29 00:42:02       18 阅读
  10. 【MySQL】MySQL小结

    2024-03-29 00:42:02       21 阅读