题目链接:https://leetcode.com/problems/find-minimum-in-rotated-sorted-array/#/description
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.
Classic binary search problem.
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 could 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.
Welcome to put your comments and suggestions.
class Solution {
public:
int findMin(vector<int>& nums) {
int left=0,right=nums.size()-1;
while(left<right)
{
if(nums[left]<nums[right])
return nums[left];
int mid=left+(right-left)/2;
if(nums[mid]>=nums[left])
left=mid+1;
else
right=mid;
}
return nums[left];
}
};
class Solution {
public:
int findMin(vector<int>& nums) {
int left=0,right=nums.size()-1;
while(left<right)
{
if(nums[left]<nums[right])
return nums[left];
int mid=left+(right-left)/2;
if(nums[mid]>=nums[left])
left=mid+1;
else if(nums[mid]<nums[left])
right=mid;
else if(nums[mid]>nums[right])
left=mid+1;
else if(nums[mid]<nums[right])
right=mid;
}
return nums[left];
}
};