问题
思路
如果没有旋转,直接返回。
如果,旋转,二分的思路。和之前方法一样,注意hign和low的更新方法。最后返回二者相邻是边界条件。
因为最小值肯定不存在有序区间当中。只能在非有序区间中寻找。
代码
class Solution {
public:
int findMin(vector<int>& nums) {
int low = 0, high = nums.size() - 1;
if( nums[low] <= nums[high] ) return nums[low];
while(low + 1 != high) {
int mid = (low+high)/2;
if( nums[mid] < nums[high] ) high = mid;
else low = mid;
}
return std::min( nums[low], nums[high] );
}
};