Skip to content

Commit 9fd78fb

Browse files
committed
Modified Top K Frequent Elements.java
1 parent 3be3188 commit 9fd78fb

File tree

1 file changed

+20
-45
lines changed

1 file changed

+20
-45
lines changed

Medium/Top K Frequent Elements.java

Lines changed: 20 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,24 @@
11
class Solution {
2-
3-
public List<Integer> topKFrequent(int[] nums, int k) {
4-
Map<Integer, Integer> map = new HashMap<>();
5-
6-
for (int i=0;i<nums.length;i++) {
7-
if (map.containsKey(nums[i])) {
8-
map.put(nums[i], map.get(nums[i])+1);
9-
}
10-
else {
11-
map.put(nums[i], 1);
12-
}
13-
}
14-
15-
Map<Integer, Integer> sortedMap = sortByValue(map);
16-
17-
List<Integer> ans = new ArrayList<>();
18-
int c = 0;
19-
20-
for (Map.Entry<Integer,Integer> entry : sortedMap.entrySet()) {
21-
if (c == k) break;
22-
ans.add(entry.getKey());
23-
24-
c++;
25-
}
26-
27-
return ans;
2+
public int[] topKFrequent(int[] nums, int k) {
3+
Map<Integer, Integer> map = new HashMap<>();
4+
for (int num : nums) {
5+
map.put(num, map.getOrDefault(num, 0) + 1);
286
}
29-
30-
private Map<Integer, Integer> sortByValue(Map<Integer, Integer> unsortMap) {
31-
32-
List<Map.Entry<Integer, Integer>> list =
33-
new LinkedList<Map.Entry<Integer, Integer>>(unsortMap.entrySet());
34-
35-
Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>() {
36-
public int compare(Map.Entry<Integer, Integer> o1,
37-
Map.Entry<Integer, Integer> o2) {
38-
return (o2.getValue()).compareTo(o1.getValue());
39-
}
40-
});
41-
42-
Map<Integer, Integer> sortedMap = new LinkedHashMap<Integer, Integer>();
43-
for (Map.Entry<Integer, Integer> entry : list) {
44-
sortedMap.put(entry.getKey(), entry.getValue());
45-
}
46-
47-
return sortedMap;
7+
PriorityQueue<Integer> pq = new PriorityQueue<>(new Comparator<Integer>(){
8+
public int compare(Integer p1, Integer p2) {
9+
return map.get(p1) - map.get(p2);
10+
}
11+
});
12+
for (Integer key : map.keySet()) {
13+
pq.add(key);
14+
if (pq.size() > k) {
15+
pq.poll();
16+
}
4817
}
18+
int[] ans = new int[k];
19+
for (int i = 0; i < k; i++) {
20+
ans[i] = pq.poll();
21+
}
22+
return ans;
23+
}
4924
}

0 commit comments

Comments
 (0)