153 Find Minimum In Rotated Sorted Array
153 Find Minimum In Rotated Sorted Array
Find Minimum in Rotated Sorted Array 
Suppose an array of length n sorted in ascending order is rotated between 1 and n times. For example, the array nums = [0,1,2,4,5,6,7] might become:
1
2
[4,5,6,7,0,1,2] if it was rotated 4 times.
[0,1,2,4,5,6,7] if it was rotated 7 times.
Notice that rotating an array [a[0], a[1], a[2], …, a[n-1]] 1 time results in the array [a[n-1], a[0], a[1], a[2], …, a[n-2]].
Given the sorted rotated array nums of unique elements, return the minimum element of this array.
You must write an algorithm that runs in O(log n) time.
Example 1:
1
2
3
4
5
**Input:** nums = [3,4,5,1,2]
**Output:** 1
**Explanation:** The original array was [1,2,3,4,5] rotated 3 times.
Example 2:
1
2
3
4
5
**Input:** nums = [4,5,6,7,0,1,2]
**Output:** 0
**Explanation:** The original array was [0,1,2,4,5,6,7] and it was rotated 4 times.
Example 3:
1
2
3
4
5
**Input:** nums = [11,13,15,17]
**Output:** 11
**Explanation:** The original array was [11,13,15,17] and it was rotated 4 times.
Constraints:
1
2
3
4
5
n == nums.length
1 <= n <= 5000
-5000 <= nums[i] <= 5000
All the integers of nums are **unique**.
nums is sorted and rotated between 1 and n times.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
use std::cmp;
impl Solution {
pub fn find_min(nums: Vec<i32>) -> i32 {
// if mid > right -> then mid lies between or left of mid
// if mid < right ->
// if mid > left -> ignore it
// if mid < left -> interesting
let mut left = 0;
let mut right = nums.len() - 1;
let mut mid = 0;
if nums.len() <= 3 {
return cmp::min(nums[left], cmp::min(nums[right], nums[(left + right)/2]));
}
while(left + 1 < right) {
//println!("{} {} {}", mid , left, right);
mid = (right + left ) / 2;
if nums[mid] < nums[mid + 1] && nums[mid] < nums[mid-1] {
return nums[mid];
}
if nums[mid] > nums[right] {
left = mid + 1;
} else {
right = mid - 1;
}
}
return cmp::min(nums[left], nums[right]);
}
}
This post is licensed under CC BY 4.0 by the author.