From 4812419687523d92a7d536f352b05264b3013f30 Mon Sep 17 00:00:00 2001 From: Justin Sexton Date: Sat, 23 Dec 2023 02:00:47 -0600 Subject: [PATCH] Added kth largest element solution --- README.md | 1 + src/leetcode/kth_largest_element.rs | 28 ++++++++++++++++++++++++++++ src/leetcode/mod.rs | 1 + 3 files changed, 30 insertions(+) create mode 100644 src/leetcode/kth_largest_element.rs diff --git a/README.md b/README.md index 639444a..6de7520 100644 --- a/README.md +++ b/README.md @@ -104,6 +104,7 @@ other languages. - Authentication Manager (https://leetcode.com/problems/design-authentication-manager/) - Best Time to Buy and Sell Stock (https://leetcode.com/problems/best-time-to-buy-and-sell-stock-ii) - Longest Substring Without Repeating Characters (https://leetcode.com/problems/longest-substring-without-repeating-characters/) +- Kth Largest Element (https://leetcode.com/problems/kth-largest-element-in-an-array/) ### Other diff --git a/src/leetcode/kth_largest_element.rs b/src/leetcode/kth_largest_element.rs new file mode 100644 index 0000000..b40e2a5 --- /dev/null +++ b/src/leetcode/kth_largest_element.rs @@ -0,0 +1,28 @@ +use std::cmp::Reverse; +use std::collections::BinaryHeap; + +pub fn find_kth_largest(numbers: Vec, k: i32) -> i32 { + let k = k as usize; + let mut heap: BinaryHeap<_> = numbers[..k].iter().map(Reverse).collect(); + for number in &numbers[k..] { + heap.push(Reverse(number)); + heap.pop(); + } + *heap.peek().unwrap().0 +} + +#[cfg(test)] +mod tests { + use test_case::test_case; + + use crate::leetcode::kth_largest_element::find_kth_largest; + + #[test_case(&[1, 2, 3, 4], 2, 3)] + #[test_case(&[1, 1, 3, 4, 5, 6], 5, 1)] + #[test_case(&[1, 2, 3], 1, 3)] + #[test_case(&[15, 5, 1, 3, 4, 5, 6, 9, 11], 2, 11)] + fn should_return_kth_largest_element(numbers: &[i32], k: i32, expected: i32) { + let result = find_kth_largest(numbers.to_vec(), k); + assert_eq!(result, expected); + } +} diff --git a/src/leetcode/mod.rs b/src/leetcode/mod.rs index f510f19..8ffa4d3 100644 --- a/src/leetcode/mod.rs +++ b/src/leetcode/mod.rs @@ -19,3 +19,4 @@ mod climb_stairs; mod longest_subtsring; mod largest_odd_number; mod number_of_strings; +mod kth_largest_element;