diff --git a/problems/0704.二分查找.md b/problems/0704.二分查找.md index ba5e538c..590ec1b1 100644 --- a/problems/0704.二分查找.md +++ b/problems/0704.二分查找.md @@ -481,41 +481,39 @@ func search(nums: [Int], target: Int) -> Int { ### **Rust:** -```rust -# (版本一)左闭右闭区间 +(版本一)左闭右开区间 +```rust +use std::cmp::Ordering; impl Solution { pub fn search(nums: Vec, target: i32) -> i32 { - let mut left:usize = 0; - let mut right:usize = nums.len() - 1; - while left as i32 <= right as i32{ - let mid = (left + right) / 2; - if nums[mid] < target { - left = mid + 1; - } else if nums[mid] > target { - right = mid - 1; - } else { - return mid as i32; + let (mut left, mut right) = (0, nums.len()); + while left < right { + let mid = (right + left) / 2; + match nums[mid].cmp(&target) { + Ordering::Less => left = mid + 1, + Ordering::Greater => right = mid, + Ordering::Equal => return mid as i32, } } -1 } } +``` -# (版本二)左闭右开区间 +//(版本二)左闭右闭区间 +```rust +use std::cmp::Ordering; impl Solution { pub fn search(nums: Vec, target: i32) -> i32 { - let mut left:usize = 0; - let mut right:usize = nums.len(); - while left < right { - let mid = (left + right) / 2; - if nums[mid] < target { - left = mid + 1; - } else if nums[mid] > target { - right = mid; - } else { - return mid as i32; + let (mut left, mut right) = (0, nums.len()); + while left <= right { + let mid = (right + left) / 2; + match nums[mid].cmp(&target) { + Ordering::Less => left = mid + 1, + Ordering::Greater => right = mid - 1, + Ordering::Equal => return mid as i32, } } -1