LeetCode #347

Top K Frequent Elements

1개의 풀이 · Python

문제 원문 보기 ↗

SOLUTION INFO

Python · main.py

main.py
class Solution:
    def topKFrequent(self, nums: List[int], k: int) -> List[int]:
        N = len(nums)
        freq = defaultdict(int)
        bucket = defaultdict(set)

        for x in nums:
            freq[x] += 1

        for key, value in freq.items():
            bucket[value].add(key)

        answer = []
        for i in range(N + 1, 0, -1):
            for x in bucket[i]:
                if len(answer) == k:
                    break
                answer.append(x)
            if len(answer) == k:
                break

        return answer

SOLUTION DESCRIPTION

풀이 설명

각 숫자의 등장 횟수를 센 뒤, 등장 횟수를 인덱스처럼 사용하는 버킷에 숫자를 모은다. 가능한 가장 큰 빈도 N부터 역순으로 버킷을 확인하며 숫자 k개를 정답에 추가한다. 정렬하지 않고 빈도를 순회하므로 시간 복잡도와 공간 복잡도는 모두 O(N)이다.