1.动态规划(O(n^2))
动态规划是求解 LIS 问题的经典方法。它通过构建一个数组 dp
,dp[i]
表示以 a[i]
结尾的最长上升子序列的长度。
实现思路:
- 初始化
dp
数组,dp[i]
初始化为1
,表示每个元素自身都可以作为一个长度为1
的子序列。 - 对每个元素
a[i]
,遍历其之前的所有元素a[j]
,如果a[i] > a[j]
,则dp[i] = max(dp[i], dp[j] + 1)
。 - 最后返回
dp
数组中的最大值。int lengthOfLIS(vector<int>& nums) { int n = nums.size(); if (n == 0) return 0; vector<int> dp(n, 1); int maxLen = 1; for (int i = 1;