Skip to content

Commit 3db966a

Browse files
μž₯μž¬μ •μž₯μž¬μ •
authored andcommitted
Top K Frequent Elements
1 parent 5e4edb4 commit 3db966a

File tree

1 file changed

+26
-15
lines changed

1 file changed

+26
-15
lines changed
Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,35 @@
11
import java.util.HashMap;
22
import java.util.Map;
3+
import java.util.PriorityQueue;
4+
import java.util.Queue;
35

46
class SolutionTopKFrequentElements {
57
public int[] topKFrequent(int[] nums, int k) {
6-
// λΉˆλ„μˆœμœΌλ‘œ k개 λ°˜ν™˜
7-
// λΉˆλ„ 체크: ν•΄μ‹œλ§΅μœΌλ‘œ 카운트. μ‹œκ°„λ³΅μž‘λ„ O(N), κ³΅κ°„λ³΅μž‘λ„ O(N)
8-
// λΉˆλ„μˆœ μ •λ ¬: sorting, μ‹œκ°„λ³΅μž‘λ„ O(N log N), κ³΅κ°„λ³΅μž‘λ„ O(N)
9-
// ν•©μ‚°: μ‹œκ°„λ³΅μž‘λ„ O(N log N), κ³΅κ°„λ³΅μž‘λ„ O(N)
8+
// 풀이
9+
// μ‹œκ°„λ³΅μž‘λ„: O(N log K), κ³΅κ°„λ³΅μž‘λ„: O(N)
1010

11-
// λΉˆλ„ 체크
12-
Map<Integer, Integer> freq = new HashMap<>();
13-
for (int num : nums) {
14-
freq.put(num, freq.getOrDefault(num, 0) + 1);
15-
}
11+
// 숫자 별 λΉˆλ„ λˆ„μ μ„ Map 이용
12+
// μ‹œκ°„λ³΅μž‘λ„: O(N), κ³΅κ°„λ³΅μž‘λ„: O(N)
13+
Map<Integer, Integer> count = new HashMap<>();
14+
for (int n: nums) {
15+
count.put(n, count.getOrDefault(n, 0) + 1);
16+
}
1617

17-
// λΉˆλ„μˆœ μ •λ ¬
18-
return freq.keySet().stream()
19-
.sorted((a, b) -> freq.get(b) - freq.get(a))
20-
.mapToInt(i -> i)
21-
.limit(k) // λ°°μ—΄μ—μ„œ μƒμœ„ k개만 λ°˜ν™˜
22-
.toArray();
18+
Queue<Integer> heap = new PriorityQueue<>((x, y) -> count.get(x) - count.get(y));
19+
// κ°€μž₯ λΉˆλ²ˆν•œ k개의 수λ₯Ό λ§Œλ“€κΈ° μœ„ν•΄ μš°μ„ μˆœμœ„ 큐λ₯Ό μ‚¬μš©
20+
// μ‹œκ°„λ³΅μž‘λ„: O(N log k), κ³΅κ°„λ³΅μž‘λ„: O(N)
21+
for (int n: count.keySet()) {
22+
heap.add(n);
23+
if (heap.size() > k) heap.poll(); // κ°€μž₯ λΉˆλ²ˆν•œ Kκ°œκ°€ λ§Œμ‘±λμœΌλ‹ˆ 더이상 μΆ”κ°€ν•˜μ§€ μ•Šκ³  μ œμ™Έ
24+
}
25+
26+
// k ~ 0 μˆœμ„œλŒ€λ‘œ νž™μ—μ„œ μ—­μˆœμœΌλ‘œ λ½‘μŒ
27+
// μ‹œκ°„λ³΅μž‘λ„: O(k log k), κ³΅κ°„λ³΅μž‘λ„: O(N)
28+
int[] result = new int[k];
29+
for(int i = k - 1; i >= 0; --i){
30+
result[i] = heap.poll();
31+
}
32+
33+
return result;
2334
}
2435
}

0 commit comments

Comments
Β (0)