min-in-rot-sorted-arr

Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.

1
(i.e.,  [0,1,2,4,5,6,7] might become  [4,5,6,7,0,1,2]).

Find the minimum element.

You may assume no duplicate exists in the array.

1
2
3
4
5
6
7
8
9
Example 1:

Input: [3,4,5,1,2]
Output: 1

Example 2:

Input: [4,5,6,7,0,1,2]
Output: 0

Notes

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
- no dups
- rotation pivot in not known?
- sorted in ascending order
- min should be at pivot
- peak just before pivot if pivot is not 0

1, 3, 5 --> pivot is at 0 - min is 1
56781234 --> min is 1
min
5

test 6
test 7
test 8
test 1 ---> min is 1
break

The following is a O(n) solution

1
2
3
4
5
6
7
8
9
10
11
int findMin(vector<int>& nums) {
int min = nums[0];
for (int i = 0; i < nums.size(); i++) {
if ((i < nums.size() - 1) &&
nums[i] > nums[i+1]) {
min = nums[i+1];
break;
}
}
return min;
}

There is a O(logn) solution that uses binary search!