항목이라는 숫자 목록과 다른 값 n이 있다고 가정합니다. 판매원은 임의의 ID가 있는 가방에 항목을 가지고 있습니다. 판매원은 가방에서 최대 n개의 항목을 삭제할 수 있습니다. n번 제거한 후 가방에서 최소 개수의 다른 ID를 찾아야 합니다.
따라서 입력이 항목 =[2, 2, 6, 6] n =2와 같으면 ID 2 또는 ID 6을 가진 두 개의 항목을 판매할 수 있으므로 출력은 1이 됩니다. 그러면 단일 대상이 있는 항목만 거기.
이 문제를 해결하기 위해 다음 단계를 따릅니다.
- c :=항목에 있는 각 요소의 빈도
- ans :=c의 크기
- freq :=c의 모든 주파수 목록 정렬
- i :=0
- 내가 <주파수의 크기인 동안
- 주파수[i] <=n이면
- n :=n - 주파수[i]
- ans :=ans - 1
- 그렇지 않으면
- 반환
- 나는 :=나는 + 1
- 주파수[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