mirror of
https://github.com/lukefleed/competitive-programming.git
synced 2026-10-06 14:14:52 +00:00
modified the binary searches, now implemented with pattern matching
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
use std::cmp::Ordering;
|
||||
|
||||
struct Solution {}
|
||||
|
||||
impl Solution {
|
||||
@@ -11,11 +13,10 @@ impl Solution {
|
||||
|
||||
while l <= r {
|
||||
let m = l + (r - l) / 2; // m = middle for the binary search
|
||||
if target > nums[m as usize] {
|
||||
l = m + 1;
|
||||
} else if target < nums[m as usize] {
|
||||
r = m - 1;
|
||||
} else {
|
||||
match target.cmp(&nums[m as usize]) {
|
||||
Ordering::Less => r = m - 1,
|
||||
Ordering::Greater => l = m + 1,
|
||||
Ordering::Equal => {
|
||||
i = m;
|
||||
if left_bias {
|
||||
r = m - 1;
|
||||
@@ -24,6 +25,7 @@ impl Solution {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return i;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
use std::cmp::Ordering;
|
||||
|
||||
fn findMin(nums: Vec<i32>) -> i32 {
|
||||
let mut res = nums[0] as i32;
|
||||
// The left and right pointers of the binary search
|
||||
@@ -5,26 +7,22 @@ fn findMin(nums: Vec<i32>) -> i32 {
|
||||
|
||||
// Binary search
|
||||
while l <= r {
|
||||
// If the left value is smaller than the right value,
|
||||
// then the left value is the smallest
|
||||
if nums[l] <= nums[r] {
|
||||
match nums[l].cmp(&nums[r]) {
|
||||
Ordering::Less | Ordering::Equal => { // The array is sorted
|
||||
res = res.min(nums[l]);
|
||||
break;
|
||||
}
|
||||
// The middle value
|
||||
let mid = l + (r - l) / 2;
|
||||
// Update the smallest value
|
||||
res = res.min(nums[mid]);
|
||||
|
||||
// If the left value is smaller than the middle value,
|
||||
// then the smallest value is on the right side
|
||||
if nums[l] <= nums[mid] {
|
||||
Ordering::Greater => { // The array is rotated
|
||||
let mid = l + (r - l) / 2; // The middle index
|
||||
res = res.min(nums[mid]); // Update the minimum
|
||||
if nums[l] <= nums[mid] { // The left half is sorted
|
||||
l = mid + 1;
|
||||
} else {
|
||||
// Otherwise, the smallest value is on the left side
|
||||
} else { // The right half is sorted
|
||||
r = mid - 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return res as i32;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user