程序查找数字列表,其中每个K大小的窗口在Python中都有唯一的元素

假设我们有一个称为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]