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

开启您的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.