Python程序:查找售出n件商品后剩余商品数量


假设我们有一个名为items的数字列表和另一个值n。一位销售人员在一个包里装有随机ID的商品。销售人员可以从包中删除多达n件商品。我们必须找到删除n件商品后包中不同ID的最小数量。

因此,如果输入类似于items = [2, 2, 6, 6] n = 2,则输出将为1,因为我们可以出售两件ID为2或ID为6的商品,然后只剩下具有单个目标的商品。

为了解决这个问题,我们将遵循以下步骤

  • c := items中每个元素的频率
  • ans := c的大小
  • freq := 对c中所有频率的列表进行排序
  • i := 0
  • 当 i < freq的大小 时,执行:
    • 如果 freq[i] <= n,则
      • n := n - freq[i]
      • ans := ans - 1
    • 否则
      • 返回 ans
    • i := i + 1
  • 返回 0

让我们看看下面的实现以更好地理解

示例

在线演示

from collections import Counter

class Solution:
   def solve(self, items, n):
      c = Counter(items)
      ans = len(c)
      freq = sorted(c.values())
      i = 0
      while i < len(freq):
         if freq[i] <= n:
            n -= freq[i]
            ans -= 1
         else:
            return ans
         i += 1
      return 0

ob = Solution()
items = [2, 2, 6, 6]
n = 2
print(ob.solve(items, n))

输入

[2, 2, 6, 6], 2

输出

1

更新于: 2020年11月26日

2K+ 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告