Skip to content

Commit 5af2984

Browse files
committed
二刷347,尝试桶排序
1 parent 8df828c commit 5af2984

File tree

3 files changed

+58
-1
lines changed

3 files changed

+58
-1
lines changed

docs/0347-top-k-frequent-elements.adoc

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,15 @@ include::{sourcedir}/_0347_TopKFrequentElements.java[tag=answer]
5656
include::{sourcedir}/_0347_TopKFrequentElements_2.java[tag=answer]
5757
----
5858
--
59+
60+
二刷(桶排序)::
61+
+
62+
--
63+
[{java_src_attr}]
64+
----
65+
include::{sourcedir}/_0347_TopKFrequentElements_21.java[tag=answer]
66+
----
67+
--
5968
====
6069

6170

logbook/202503.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ endif::[]
6868
|{counter:codes2503}
6969
|{leetcode_base_url}/top-k-frequent-elements/[347. Top K Frequent Elements^]
7070
|{doc_base_url}/0347-top-k-frequent-elements.adoc[题解]
71-
|✅ Top K 问题,优先队列
71+
|✅ Top K 问题,优先队列;桶排序
7272

7373
|===
7474

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package com.diguage.algo.leetcode;
2+
3+
import java.util.ArrayList;
4+
import java.util.HashMap;
5+
import java.util.List;
6+
import java.util.Map;
7+
8+
public class _0347_TopKFrequentElements_21 {
9+
// tag::answer[]
10+
/**
11+
* 桶排序
12+
*
13+
* @author D瓜哥 · https://www.diguage.com
14+
* @since 2025-03-26 14:56:31
15+
*/
16+
public int[] topKFrequent(int[] nums, int k) {
17+
Map<Integer, Integer> numToCountMap = new HashMap<>();
18+
int maxCount = 0;
19+
for (int num : nums) {
20+
Integer count = numToCountMap.getOrDefault(num, 0);
21+
Integer newCnt = ++count;
22+
if (newCnt > maxCount) {
23+
maxCount = newCnt;
24+
}
25+
numToCountMap.put(num, newCnt);
26+
}
27+
List<Integer>[] buckets = new ArrayList[maxCount + 1];
28+
numToCountMap.forEach((key, v) -> {
29+
if (buckets[v] == null) {
30+
buckets[v] = new ArrayList<>();
31+
}
32+
buckets[v].add(key);
33+
});
34+
int[] result = new int[k];
35+
for (int i = maxCount; i >= 0 && k > 0; i--) {
36+
if (buckets[i] != null) {
37+
for (int num : buckets[i]) {
38+
result[--k] = num;
39+
}
40+
}
41+
}
42+
return result;
43+
}
44+
// end::answer[]
45+
public static void main(String[] args) {
46+
new _0347_TopKFrequentElements_21().topKFrequent(new int[]{4, 1, -1, 2, -1, 2, 3}, 2);
47+
}
48+
}

0 commit comments

Comments
 (0)