Skip to content

Commit d721db5

Browse files
committed
find top k frequent elements
1 parent ffc11b7 commit d721db5

File tree

1 file changed

+75
-0
lines changed

1 file changed

+75
-0
lines changed
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
import java.util.HashMap;
2+
import java.util.HashSet;
3+
import java.util.Map;
4+
5+
public class Geegong {
6+
7+
8+
public int[] topKFrequent(int[] nums, int k) {
9+
int[] result = new int[k];
10+
11+
// key : num element in nums / value : frequency of num elements
12+
Map<Integer, Integer> numMap = new HashMap<>();
13+
14+
// key : frequency of num elements / value : HashSet<Integer> num elements
15+
Map<Integer, HashSet<Integer>> frequencyMap = new HashMap<>();
16+
17+
// most frequent numbers
18+
int maxCount = 0;
19+
20+
// initialize numMap
21+
for (int num : nums) {
22+
if (numMap.containsKey(num)) {
23+
Integer alreadyCounted = numMap.get(num);
24+
numMap.put(num, alreadyCounted + 1);
25+
} else {
26+
numMap.put(num, 1);
27+
}
28+
}
29+
30+
31+
//numHashSetMap
32+
for (int num : numMap.keySet()) {
33+
int frequencyOfNum = numMap.get(num);
34+
maxCount = Math.max(maxCount, frequencyOfNum);
35+
36+
if (frequencyMap.containsKey(frequencyOfNum)) {
37+
HashSet<Integer> alreadySet = frequencyMap.get(frequencyOfNum);
38+
alreadySet.add(num);
39+
40+
frequencyMap.put(frequencyOfNum, alreadySet);
41+
42+
} else {
43+
HashSet<Integer> newHashSet = new HashSet<>();
44+
newHashSet.add(num);
45+
46+
frequencyMap.put(frequencyOfNum, newHashSet);
47+
}
48+
}
49+
50+
51+
// maxCount 부터 decreasing
52+
int resultIndex=0;
53+
for(int frequency=maxCount; frequency>=0; frequency--) {
54+
if (resultIndex >= result.length) {
55+
return result;
56+
}
57+
58+
if (frequencyMap.containsKey(frequency)) {
59+
HashSet<Integer> numElements = frequencyMap.get(frequency);
60+
61+
for (int numElement : numElements) {
62+
result[resultIndex] = numElement;
63+
resultIndex++;
64+
65+
66+
if (resultIndex >= result.length) {
67+
return result;
68+
}
69+
}
70+
}
71+
}
72+
73+
return result;
74+
}
75+

0 commit comments

Comments
 (0)