items নামক একটি তালিকা এবং একটি মান n দেওয়া আছে। একজন বিক্রেতা তার ব্যাগে র্যান্ডম আইডিয়ুক্ত আইটেম রাখে। সে চায় তো n সংখ্যক আইটেম মুছে ফেলতে পারে। n অপসারণের পর ব্যাগে থাকা আলাদা আইডির ন্যূনতম সংখ্যা বের করতে হবে।
উদাহরণ: items = [2, 2, 6, 6], n = 2 হলে আউটপুট ১, কারণ সে দুইটি 2 বা 6 আইডি মুছে দিলে শুধু এক ধরনের আইডি থাকবে।
সমাধানের ধাপসমূহ
- Counter ব্যবহার করে প্রতিটি আইডির ফ্রিকোয়েন্সি বের করুন
- ans := ইউনিক আইডি সংখ্যা
- ফ্রিকোয়েন্সি সর্ট করুন
- সর্বনিম্ন ফ্রিকোয়েন্সি থেকে শুরু করে n 때까지 মুছে ans কমানো
- ans ফেরত দিন
উদাহরণ কোড
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