Python程式:統計包含恰好k個唯一元素的子列表數量


假設我們有一個名為nums的數字列表和另一個值k,我們必須找到所需子列表的數量,這些子列表中恰好包含k個唯一數字。

因此,如果輸入類似於nums = [2, 2, 3, 4] k = 2,則輸出將為3,因為我們有以下子列表:[2, 2, 3],[2, 3],[3, 4]。

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

  • 定義一個函式count()。這將接收K
  • slot := 一個空的對映,預設情況下所有值都為0
  • i := res := 0
  • 對於每個索引j和值x nums,執行:
    • slot[x] := slot[x] + 1
    • 當slot的大小 > K時,執行:
      • slot[nums[i]] := slot[nums[i]] - 1
      • 如果slot[nums[i]]等於0,則
        • 刪除slot[nums[i]]
      • i := i + 1
    • res := res + j - i + 1
  • 返回res
  • 在主方法中執行以下操作:
  • 返回count(k) - count(k - 1)

示例 (Python)

讓我們來看下面的實現,以便更好地理解:

from collections import Counter
class Solution:
   def solve(self, nums, k):
      def count(K):
         slot = Counter()
         i = res = 0
         for j, x in enumerate(nums):
            slot[x] += 1
            while len(slot) > K:
               slot[nums[i]] -= 1
               if slot[nums[i]] == 0:
                  del slot[nums[i]]
               i += 1
            res += j - i + 1
         return res
      return count(k) - count(k - 1)
ob = Solution()
nums = [2, 2, 3, 4]
k = 2
print(ob.solve(nums, k))

輸入

[2, 2, 3, 4], 2

輸出

3

更新於:2020年12月12日

瀏覽量:132

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告