1259:【例9.3】求最长不下降序列
时间: 2023-04-25 16:04:37 浏览: 108
这道题目可以使用动态规划来解决。我们可以定义一个数组dp,其中dp[i]表示以第i个数为结尾的最长不下降序列的长度。初始时,dp数组中的每个元素都为1,因为每个数本身就可以构成一个长度为1的不下降序列。
接下来,我们可以使用两个指针i和j来遍历数组。当nums[i] <= nums[j]时,说明第i个数可以接在第j个数后面构成一个不下降序列,此时我们可以更新dp[i]的值为dp[j]+1。最终,dp数组中的最大值就是所求的最长不下降序列的长度。
具体的实现可以参考以下代码:
int lengthOfLIS(vector<int>& nums) {
int n = nums.size();
vector<int> dp(n, 1);
int res = 1;
for (int i = 1; i < n; ++i) {
for (int j = ; j < i; ++j) {
if (nums[i] > nums[j]) {
dp[i] = max(dp[i], dp[j] + 1);
}
}
res = max(res, dp[i]);
}
return res;
}
阅读全文