8000 Update `Top K Elements/347_Top_K_Frequent_Elements.java` · seanprashad/leetcode-patterns@f22090f · GitHub
[go: up one dir, main page]

Skip to content

Commit f22090f

Browse files
committed
Update Top K Elements/347_Top_K_Frequent_Elements.java
1 parent f4877ca commit f22090f

File tree

1 file changed

+17
-40
lines changed

1 file changed

+17
-40
lines changed
Lines changed: 17 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,34 @@
11
class Solution {
22
public int[] topKFrequent(int[] nums, int k) {
3-
if (nums == null || nums.length == 0) {
4-
return new int[0];
5-
}
6-
7-
Map<Integer, Integer> hm = new HashMap<>();
3+
Map<Integer, Integer> freqMap = new HashMap<>();
4+
List<List<Integer>> buckets = new ArrayList<>();
85

9-
for (int num : nums) {
10-
hm.put(num, hm.getOrDefault(num, 0) + 1);
6+
for (int i = 0; i < nums.length; i++) {
7+
freqMap.merge(nums[i], 1, Integer::sum);
118
}
129

13-
int i = 0;
14-
int[] unique = new int[hm.size()];
15-
for (int key : hm.keySet()) {
16-
unique[i++] = key;
10+
for (int i = 0; i <= nums.length; i++) {
11+
buckets.add(new ArrayList<>());
1712
}
1813

19-
int low = 0, high = unique.length - 1;
14+
for (Map.Entry<Integer, Integer> entry : freqMap.entrySet()) {
15+
int number = entry.getKey();
16+
int freq = entry.getValue();
2017

21-
while (low < high) {
22-
int idx = quickSelect(unique, hm, low, high);
23-
24-
if (idx == k) {
25-
break;
26-
} else if (idx < k) {
27-
low = idx + 1;
28-
} else {
29-
high = idx - 1;
30-
}
18+
buckets.get(freq).add(number);
3119
}
3220

33-
return Arrays.copyOf(unique, k);
34-
}
35-
36-
private int quickSelect(int[] nums, Map<Integer, Integer> hm, int low, int high) {
37-
int idx = low, pivot = high;
38-
int pivot_frequency = hm.get(nums[pivot]);
21+
int[] result = new int[k];
22+
int idx = 0;
3923

40-
for (int i = low; i < high; i++) {
41-
if (hm.get(nums[i]) > pivot_frequency) {
42-
swap(nums, i, idx);
24+
for (int i = buckets.size() - 1; i >= 0 && idx < k; i--) {
25+
for (int n : buckets.get(i)) {
26+
result[idx] = n;
4327
++idx;
28+
if (idx == k) { break; }
4429
}
4530
}
4631

47-
swap(nums, idx, high);
48-
return idx;
49-
}
50-
51-
private void swap(int[] nums, int i, int j) {
52-
int temp = nums[i];
53-
nums[i] = nums[j];
54-
nums[j] = temp;
55-
return;
32+
return result;
5633
}
5734
}

0 commit comments

Comments
 (0)
0