题目描述:
Suppose a sorted array is rotated at some pivot unknown to you beforehand.
(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).
Find the minimum element.
Notice
The array may contain duplicates.
Example
题目思路:
Given [4,4,5,6,7,0,1,2]
return 0
.
这题和#159基本上一样,只是为了省去repeat number的考虑,加了俩while循环skip掉重复的numbers。
Mycode(AC = 14ms):
class Solution {
public:
/**
* @param num: the rotated sorted array
* @return: the minimum number in the array
*/
int findMin(vector<int> &num) {
// write your code here
if (num.size() == 1) {
return num[0];
}
int l = 0, r = num.size() - 1;
while (l + 1 < r) {
int mid = (l + r) / 2;
// skip the repeated numbers
while (l + 1 < r && num[l] == num[l + 1]) {
l++;
}
if (l + 1 >= r) break;
// skip the repeated numbers
while (l + 1 < r && num[r] == num[r - 1]) {
r--;
}
if (l + 1 >= r) break;
if (num[mid] < num[l] || num[mid] < num[r]) {
r = mid;
}
else {
l = mid;
}
}
return num[l] < num[r] ? num[l] : num[r];
}
};