Skip to main content

rustgym/leetcode/
_347_top_k_frequent_elements.rs

1struct Solution;
2use std::cmp::Reverse;
3use std::collections::BinaryHeap;
4use std::collections::HashMap;
5
6type Pair = (Reverse<usize>, i32);
7
8impl Solution {
9    fn top_k_frequent(nums: Vec<i32>, k: i32) -> Vec<i32> {
10        let k = k as usize;
11        let mut hm: HashMap<i32, usize> = HashMap::new();
12        let mut pq: BinaryHeap<Pair> = BinaryHeap::new();
13        for x in nums {
14            *hm.entry(x).or_default() += 1;
15        }
16        for (x, f) in hm {
17            pq.push((Reverse(f), x));
18            if pq.len() > k {
19                pq.pop();
20            }
21        }
22        pq.into_iter().map(|p| p.1).rev().collect()
23    }
24}
25
26#[test]
27fn test() {
28    let nums = vec![1, 1, 1, 2, 2, 3];
29    let k = 2;
30    let res = vec![1, 2];
31    assert_eq!(Solution::top_k_frequent(nums, k), res);
32}