สมมติว่าเรามีรายการตัวเลขที่เรียกว่ารายการและค่าอื่น n พนักงานขายมีสินค้าในกระเป๋าพร้อมรหัสสุ่ม พนักงานขายสามารถลบรายการออกจากกระเป๋าได้มากถึง n รายการ เราต้องหาจำนวนขั้นต่ำของ ID ต่างๆ ในกระเป๋าหลังจากนำออกแล้ว n รายการ
ดังนั้นหากอินพุตเป็นเหมือนรายการ =[2, 2, 6, 6] n =2 ผลลัพธ์จะเป็น 1 เนื่องจากเราสามารถขายสองรายการด้วย ID 2 หรือ ID 6 ดังนั้นเฉพาะรายการที่มีเป้าหมายเดียวจะเป็น ที่นั่น
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้:
- c :=ความถี่ของแต่ละองค์ประกอบที่มีอยู่ในรายการ
- ans :=ขนาดของ c
- freq :=เรียงลำดับรายการความถี่ทั้งหมดใน c
- ผม :=0
- ในขณะที่ฉัน <ขนาดความถี่ ทำ
- ถ้า freq[i] <=n แล้ว
- n :=n - freq[i]
- ans :=ans - 1
- มิฉะนั้น
- คืนสินค้า
- ผม :=ผม + 1
- ถ้า freq[i] <=n แล้ว
- คืน 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