假设我们有一个称为nums和另一个数字k的数字列表,我们必须在每个大小为k的窗口中找到不同数字的计数列表。
因此,如果输入像nums = [2,2,3,3,4],k = 2,那么输出将是[1,2,1,2,2],因为窗口是[2,2], [2,3],[3,3]和[3,4]。
为了解决这个问题,我们将遵循以下步骤-
c:=创建一个以num为单位的元素及其频率的字典
ans:=一个新列表
对于范围在k到nums大小的i
删除c [nums [i-k]]
在ans的末尾插入c的大小
c [nums [i]]:= c [nums [i]] + 1
c [nums [i-k]]:= c [nums [i-k]]-1
如果c [nums [i-k]]与0相同,则
在ans的末尾插入c的大小
返回ans
让我们看下面的实现以更好地理解-
from collections import Counter class Solution: def solve(self, nums, k): c = Counter() for i in range(k): c[nums[i]] += 1 ans = [] for i in range(k, len(nums)): ans.append(len(c)) c[nums[i]] += 1 c[nums[i - k]] -= 1 if c[nums[i - k]] == 0: del c[nums[i - k]] ans.append(len(c)) return ans ob = Solution()nums = [2, 2, 3, 3, 4] print(ob.solve(nums, 2))
[2, 2, 3, 3, 4], 2
输出结果
[1, 2, 1, 2]