📅  最后修改于: 2023-12-03 15:26:11.370000             🧑  作者: Mango
给定一个整数数组 nums,找出其中最长且连续的的完美子序列的长度。
完美子序列指的是该子序列中每个元素的出现次数均相同。
输入: nums = [1,2,2,3,3,3,2,2,1,1] 输出: 5 解释: 最长的完美子序列是 [2,2,3,3,3],其中每个数字均出现了 3 次。
输入: nums = [1,1,1,2,2,2,1,1,1] 输出: 6 解释: 最长的完美子序列是 [1,1,1,2,2,2],其中每个数字均出现了 3 次。
首先,我们可以统计每个数在原数组中出现的次数,并以此组成一个新数组 count。然后,我们可以遍历这个新数组,统计最长的完美子序列长度。
具体来说,我们维护两个变量 maxCount 和 len,其中 maxCount 表示当前最多出现次数,而 len 表示当前子序列的长度。而在遍历过程中,我们可以使用滑动窗口来维护这个子序列,即在窗口中,出现次数为 maxCount 的数字必须占据该窗口中的大部分,这样才能最大化窗口长度。
def findLHS(nums: List[int]) -> int:
cnt = collections.Counter(nums)
max_len = 0
for num in cnt.keys():
if num + 1 in cnt:
max_len = max(max_len, cnt[num] + cnt[num + 1])
return max_len