LC 100327. 求出最长好子序列 II
https://leetcode.cn/problems/find-the-maximum-length-of-a-good-subsequence-ii/description/
维持两个最大长度。这题看了题解,觉得题解里面的写法很简洁,所以临摹了一版本。我的第一个版本其实思路是差不多的,但是感觉在写的时候其实信心不足。
class Solution:
def maximumLength(self, nums: List[int], k: int) -> int:
mx = [[0] * 3 for _ in range(k + 1)]
fx = {}
for x in nums:
if x not in fx:
fx[x] = [0] * (k + 1)
f = fx[x]
for kk in range(k, -1, -1):
f[kk] += 1
if kk > 0:
m = mx[kk - 1]
f[kk] = max(f[kk], (m[1] if m[2] == x else m[0]) + 1)
# f[kk] = max(f[kk], m[0] + 1)
# update m
v = f[kk]
m = mx[kk]
if v > m[0]:
if m[2] == x:
m[0] = v
else:
m[0], m[1], m[2] = v, m[0], x
elif v > m[1] and m[2] != x:
m[1] = v
# print(mx)
return mx[k][0]