diff options
Diffstat (limited to 'top_k_freq_words.rs')
-rw-r--r-- | top_k_freq_words.rs | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/top_k_freq_words.rs b/top_k_freq_words.rs new file mode 100644 index 0000000..606c237 --- /dev/null +++ b/top_k_freq_words.rs @@ -0,0 +1,26 @@ +use std::collections::BinaryHeap; +use std::collections::HashMap; + +struct Solution; + +impl Solution { + pub fn top_k_frequent(words: Vec<String>, k: i32) -> Vec<String> { + let mut word_to_freq = HashMap::<String, i32>::new(); + for w in words { + *word_to_freq.entry(w).or_default() += 1; + } + let mut heap = BinaryHeap::<(i32, String)>::new(); + for (word, freq) in word_to_freq { + heap.push((-freq, word)); + if heap.len() > k as usize { + heap.pop(); + } + } + let mut ans: Vec<String> = vec![]; + while let Some((_freq, word)) = heap.pop() { + ans.push(word); + } + ans.reverse(); + ans + } +} |