From f861459f2c3f67e9175547e240b6d3b3bf6f7d59 Mon Sep 17 00:00:00 2001 From: jackfiled Date: Thu, 18 Jul 2024 12:06:01 +0800 Subject: [PATCH] 20240718 Finished --- src/problem/mod.rs | 3 +- ...ast_position_of_element_in_sorted_array.rs | 60 +++++++++++++++++++ 2 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 src/problem/p34_find_first_and_last_position_of_element_in_sorted_array.rs diff --git a/src/problem/mod.rs b/src/problem/mod.rs index a4cd878..e0d11fb 100644 --- a/src/problem/mod.rs +++ b/src/problem/mod.rs @@ -176,4 +176,5 @@ mod p53_maximum_subarray; mod p918_maximum_sum_circular_subarray; mod p35_search_insert_position; mod p74_search_a_2d_matrix; -mod p33_search_in_rotated_sorted_array; \ No newline at end of file +mod p33_search_in_rotated_sorted_array; +mod p34_find_first_and_last_position_of_element_in_sorted_array; \ No newline at end of file diff --git a/src/problem/p34_find_first_and_last_position_of_element_in_sorted_array.rs b/src/problem/p34_find_first_and_last_position_of_element_in_sorted_array.rs new file mode 100644 index 0000000..db51e80 --- /dev/null +++ b/src/problem/p34_find_first_and_last_position_of_element_in_sorted_array.rs @@ -0,0 +1,60 @@ +/** + * [34] Find First and Last Position of Element in Sorted Array + */ +pub struct Solution {} + + +// submission codes start here + +impl Solution { + pub fn search_range(nums: Vec, target: i32) -> Vec { + if nums.len() == 0 { + return vec![-1, -1]; + } + + let (mut left, mut right) = (0, nums.len()); + + while left < right { + let middle = (right - left) / 2 + left; + + if nums[middle] < target { + left = middle + 1; + } else { + right = middle; + } + } + + if left >= nums.len() || nums[left] != target { + return vec![-1, -1]; + } + + let mut l = left; + + while l >= 1 && nums[l - 1] == target { + l -= 1; + } + + let mut r = left; + + while r + 1 < nums.len() && nums[r + 1] == target { + r += 1; + } + + vec![l as i32, r as i32] + } +} + +// submission codes end + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_34() { + assert_eq!(vec![3, 4], Solution::search_range(vec![5, 7, 7, 8, 8, 10], 8)); + assert_eq!(vec![-1, -1], Solution::search_range(vec![2, 2], 3)); + assert_eq!(vec![0, 0], Solution::search_range(vec![1], 1)); + assert_eq!(vec![0, 1], Solution::search_range(vec![2, 2], 2)); + } +}