leetcode_rust/
top_k_frequent_elements.rs1#![allow(dead_code)]
2
3pub fn top_k_frequent(nums: Vec<i32>, k: i32) -> Vec<i32> {
4 use std::collections::BinaryHeap;
5 use std::collections::HashMap;
6 let mut map = HashMap::new();
7 for num in nums {
8 match map.get_mut(&num) {
9 Some(v) => {
10 *v += 1;
11 }
12 None => {
13 map.insert(num, 1);
14 }
15 }
16 }
17 let mut heap = map
18 .into_iter()
19 .map(|(k, v)| (v, k))
20 .collect::<BinaryHeap<_>>();
21
22 let mut res = vec![];
23 for _ in 0..k {
24 heap.pop().map(|(_k, v)| res.push(v));
25 }
26
27 res
28}
29
30#[cfg(test)]
31mod tests {
32 use super::*;
33
34 #[test]
35 fn test1() {
36 let nums = vec![1, 1, 1, 2, 2, 3];
37 let k = 2;
38 assert_eq!(top_k_frequent(nums, k), vec![1, 2]);
39 }
40}