📅  最后修改于: 2023-12-03 15:27:34.768000             🧑  作者: Mango
给定一个整数数组 nums
和一个整数 k
,请找到在长度为 k
的子数组中出现次数最多的元素。如果存在多个元素出现频率相同,则返回其中最大的元素。
这道题的解决思路比较简单,我们可以使用一个哈希表来存储子数组中每个元素出现的次数,然后找到出现次数最多的那个元素。我们可以使用一个滑动窗口,对于数组中的每个元素,我们将它添加到窗口中,并更新哈希表中对应元素的出现次数。如果窗口长度大于 k
,我们就把窗口中最左边的那个元素从哈希表中删除,再把窗口向右移动一个单位,直到窗口长度为 k
。
最后,我们再次遍历哈希表,找到出现次数最多的元素并返回即可。
def max_unique(nums, k):
max_num, max_count = None, -1
counter = {}
for i in range(len(nums)):
num = nums[i]
counter[num] = counter.get(num, 0) + 1
if i >= k:
left_num = nums[i-k]
counter[left_num] -= 1
if counter[left_num] == 0:
del counter[left_num]
if i >= k-1:
for num, count in counter.items():
if count > max_count or (count == max_count and num > max_num):
max_num = num
max_count = count
return max_num
assert max_unique([1,2,3,2,1], 3) == 2
assert max_unique([1,2,3,2,2,1], 3) == 2