반응형
포인트
1. 힙을 사용하여 어떤 식으로 가장 많은 것들을 받아 올 수 있는지를 확인할 수 있다.
🧶문서는 항상 수정 될 수 있습니다. 비판은 환영합니다.
c++/cpp
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int,int> map;
for(int num : nums){
map[num]++;
}
vector<int> result;
priority_queue<pair<int,int>> pq;
for(auto it = map.begin(); it != map.end(); it++){
pq.push(make_pair(it->second, it->first));
if(pq.size() > map.size() - k){
result.push_back(pq.top().second);
pq.pop();
}
}
return result;
}
};
python
version1
class Solution:
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
return list(zip(*Counter(nums).most_common(k)))[0]
version2
class Solution:
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
freqs = Counter(nums)
heaps = []
# 힙에 음수로 삽입
for f in freqs:
heapq.heappush(heaps, (-freqs[f], f))
result = []
# k번 만큼 추출, 민 힙 이므로 가장 작은 음수 순으로 추출
for _ in range(k):
result.append(heapq.heappop(heaps)[1])
return result
반응형
'알고리즘' 카테고리의 다른 글
[알고리즘] Longest Substring Without Repeating Characters (0) | 2021.03.08 |
---|---|
[알고리즘] Jewels and Stones (0) | 2021.03.08 |
[알고리즘] 로봇 청소기 (0) | 2021.03.07 |
[알고리즘] 치킨 배달 (0) | 2021.03.07 |
[알고리즘] Permutations (0) | 2021.03.04 |
댓글