Giả sử chúng ta có một danh sách các số được gọi là mục và một giá trị khác n. Một người bán hàng có các mặt hàng trong túi với các ID ngẫu nhiên. Người bán hàng có thể xóa tối đa n mặt hàng khỏi túi. Chúng tôi phải tìm số lượng ID khác nhau tối thiểu trong túi sau n lần xóa.
Vì vậy, nếu đầu vào giống như mặt hàng =[2, 2, 6, 6] n =2, thì đầu ra sẽ là 1 vì anh ta có thể bán hai mặt hàng có ID 2 hoặc ID 6, khi đó chỉ những mặt hàng có mục tiêu duy nhất sẽ là ở đó.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau:
- c:=tần suất xuất hiện của mỗi phần tử trong các mục
- ans:=kích thước của c
- freq:=sắp xếp danh sách tất cả các tần số trong c
- i:=0
- while i
- nếu freq [i] <=n, thì
- n:=n - freq [i]
- ans:=ans - 1
- nếu không,
- trả lại ans
- i:=i + 1
- nếu freq [i] <=n, thì
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn:
Ví dụ
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))
Đầu vào
[2, 2, 6, 6], 2
Đầu ra
1