diff --git a/problems/0034.在排序数组中查找元素的第一个和最后一个位置.md b/problems/0034.在排序数组中查找元素的第一个和最后一个位置.md index 8b12845e..31ed4f7f 100644 --- a/problems/0034.在排序数组中查找元素的第一个和最后一个位置.md +++ b/problems/0034.在排序数组中查找元素的第一个和最后一个位置.md @@ -389,6 +389,57 @@ class Solution: return [leftBorder, rightBorder] ``` +### Rust + +```rust + +impl Solution { + pub fn search_range(nums: Vec, target: i32) -> Vec { + let right_border = Solution::get_right_border(&nums, target); + let left_border = Solution::get_left_border(&nums, target); + if right_border == -2 || left_border == -2 { + return vec![-1, -1]; + } + if right_border - left_border > 0 { + return vec![left_border, right_border - 1]; + } + vec![-1, -1] + } + + pub fn get_right_border(nums: &Vec, target: i32) -> i32 { + let mut left = 0; + let mut right = nums.len(); + let mut right_border: i32 = -2; + while left < right { + let mid = (left + right) / 2; + if nums[mid] > target { + right = mid; + } else { + left = mid + 1; + right_border = left as i32; + } + } + right_border as i32 + } + + pub fn get_left_border(nums: &Vec, target: i32) -> i32 { + let mut left = 0; + let mut right = nums.len(); + let mut left_border: i32 = -2; + while left < right { + let mid = (left + right) / 2; + if nums[mid] >= target { + right = mid; + left_border = right as i32; + } else { + left = mid + 1; + } + } + left_border as i32 + } +} +``` + ### Go ```go