Suppose a sorted array is rotated at some unknown to you beforehand.
(I. e .,0 1 2 4 5 6 7
Might become4 5 6 7 0 1 2
).
Find the minimum element.
You may assume no duplicate exists in the array.
O (N) time complexity solution
Regardless of how the array is rotated, it can be ensured that if the next element begins to become smaller, the next element will be the smallest. If it remains unchanged, the first element will be the smallest.
C ++ codeInt findMin (vector <int> & num) {for (int I = 1; I <num. size (); ++ I) if (num [I] <num [I-1]) return num [I]; return num [0];}
O (log (N) time complexity solution
On Discuss, we can see a better method to use binary search. The time complexity is O (log (N )).
Looking at subarray with index [start, end]. we can find out that if the first member is less than the last member, there's no rotation in the array. so we coshould directly return the first element in this subarray.
If the first element is larger than the last one, then we compute the element in the middle, and compare it with the first element. if value of the element in the middle is larger than the first element, we know the rotation is at the second half of this array. else, it is in the first half in the array.
C ++ codeInt findMin (vector <int> & num) {int start = 0, end = num. size ()-1; while (start <end) {if (num [start] <num [end]) return num [start]; int mid = (start + end) /2; if (num [mid]> = num [start]) {start = mid + 1;} else {end = mid;} return num [start];}
LeetCode [Array]: Find Minimum in Rotated Sorted Array