Python 程式:查詢每個大小為 K 的視窗都包含唯一元素的數字列表


假設我們有一個名為 nums 的數字列表和另一個數字 k,我們需要找到一個列表,其中包含每個大小為 k 的視窗中不同數字的數量。

因此,如果輸入類似於 nums = [2, 2, 3, 3, 4],k = 2,則輸出將為 [1, 2, 1, 2],因為視窗為 [2, 2]、[2, 3]、[3, 3] 和 [3, 4]。

為了解決這個問題,我們將遵循以下步驟:

  • c := 建立一個字典,儲存 nums 中元素及其頻率。

  • ans := 新建一個列表。

  • 對於 i 從 k 到 nums 的大小範圍,執行以下操作:

    • 將 c 的大小插入 ans 的末尾。

    • c[nums[i]] := c[nums[i]] + 1

    • c[nums[i - k]] := c[nums[i - k]] - 1

    • 如果 c[nums[i - k]] 等於 0,則:

      • 刪除 c[nums[i - k]]。

  • 將 c 的大小插入 ans 的末尾。

  • 返回 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]

更新於: 2020-10-09

222 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告