题目描述:
Suppose an array sorted in ascending order 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.
You may assume no duplicate exists in the array.
Example 1:
Input: [3,4,5,1,2]
Output: 1
Example 2:
Input: [4,5,6,7,0,1,2]
Output: 0
寻找旋转数组的最小元素,显然是采用二分法,判断单增序列然后进一步循环。
class Solution {
public:
int findMin(vector<int>& nums) {
int begin=0;
int end=nums.size()-1;
int mid=(begin+end)/2;
while(begin<=end)
{
if(end-begin>=2)
{
if(nums[mid]<nums[mid-1]&&nums[mid]<nums[mid+1]) return nums[mid];
else if(nums[begin]<nums[begin+1]&&nums[begin]<nums[end]) return nums[begin];
else if(nums[end]<nums[end-1]&&nums[end]<nums[begin]) return nums[end];
else if(nums[mid]>nums[begin]) begin=mid+1;
else end=mid-1;
}
else if(end-begin==1) return min(nums[begin],nums[end]);
else if(begin==end) return nums[mid];
mid=(begin+end)/2;
}
}
};