跳到主要内容

index

3177. 求出最长好子序列 II

给你一个整数数组 nums 和一个 非负 整数 k 。如果一个整数序列 seq 满足在范围下标范围 [0, seq.length - 2] 中存在 不超过 k 个下标 i 满足 seq[i] != seq[i + 1] ,那么我们称这个整数序列为  序列。

请你返回 nums 中 

子序列

 的最长长度

示例 1:

输入: nums = [1,2,1,1,3], k = 2

输出: 4

解释:

最长好子序列为 [1,2,1,1,3] 。

示例 2:

输入: nums = [1,2,3,4,5,1], k = 0

输出: 2

解释:

最长好子序列为 [1,2,3,4,5,1] 。

提示:

  • 1 <= nums.length <= 5 * 10^3
  • 1 <= nums[i] <= 10^9
  • 0 <= k <= min(50, nums.length)

题解

0x3f

不会

class Solution {
public:
int maximumLength(vector<int>& nums, int k) {
unordered_map<int, vector<int>> fs;
vector<int> mx(k + 2);
for (int x : nums) {
if (!fs.contains(x)) {
fs[x] = vector<int>(k + 1);
}
auto& f = fs[x];
for (int j = k; j >= 0; j--) {
f[j] = max(f[j], mx[j]) + 1;
mx[j + 1] = max(mx[j + 1], f[j]);
}
}
return mx[k + 1];
}
};
C++
请作者喝奶茶:
Alipay IconQR Code
Alipay IconQR Code
本文遵循 CC CC 4.0 BY-SA 版权协议, 转载请标明出处
Loading Comments...