最长上升子序列问题是一个经典的动态规划问题,最长上升子序列是指在一个序列中,找到一个最长的子序列,使得子序列中的元素按照顺序递增。
1.初始化:
2.我们首先初始化一个大小为 n 的数组 dp,其中 dp[i] 表示以 nums[i] 结尾的最长上升子序列的长度,初始值为 1。
3.max_len 表示全局最长上升子序列的长度,初始值也为 1。
4.状态转移:
5.对于每个元素 nums[i],我们尝试找到前面的元素 nums[j](j < i),使得 nums[j] < nums[i]。
6.如果找到这样的 j,那么 dp[i] = dp[j] + 1。
7.在遍历过程中不断更新 max_len,以获得最终的最长上升子序列长度。
8.结果输出:
9.根据 dp 数组中的最大值 max_len,即为最长上升子序列的长度。
这样,通过动态规划的方法,我们可以有效地找到数组中的最长上升子序列的长度。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int lengthOfLIS(vector<int>& nums) {
int n = nums.size();
if (n == 0) return 0;
vector<int> dp(n, 1);