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