#2124. 最长不降子序列
最长不降子序列
📘 最长不下降子序列(LNDS)
📝 题目描述
给定一个长度为 n 的整数序列 a[1..n],如果存在一组下标满足:
1 ≤ i₁ < i₂ < ... < iₖ ≤ n 且 a[i₁] ≤ a[i₂] ≤ ... ≤ a[iₖ]
那么该子序列称为一个 不下降子序列。请你编写程序,求出其中最长不下降子序列的长度(LNDS)。
📥 输入格式
第一行一个整数 n,表示数组长度(1 ≤ n ≤ 1000)
第二行 n 个用空格分隔的整数,表示数组元素。
📤 输出格式
一个整数,表示最长不下降子序列的长度。
💡 输入输出样例
【输入样例】
4
1 3 1 2
【输出样例】
3
解释:最长不下降子序列是 [1, 1, 2] ,长度为 3。
🧠 解题思路(动态规划)
- 定义
dp[i]表示以第i个元素结尾的最长不下降子序列的长度; - 初始化:
dp[i] = 1,每个元素都可单独成序列; - 状态转移:
if (a[j] <= a[i]) { dp[i] = max(dp[i], dp[j] + 1); } - 最终答案是
max(dp[1..n])。
✅ 时间与空间复杂度
- 时间复杂度:O(n²)
- 空间复杂度:O(n)