153. Find Minimum in Rotated Sorted Array
题目描述:
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.
题目链接:153. Find Minimum in Rotated Sorted Array
算法描述:
由题可知,给出一个已经 “偏移” 过的递增数组,我们将返回这个数组的最小值。
我们利用二分法来求得这个最小数,但是在一些地方我们需要找到这个“偏移”数组的一些规律:
(1)如果数组的第一个元素小于最后一个元素,那么这个数组是没有经过“偏移”的,则直接返回第一个元素(即最小元素)即可。
(2)我们比较中间元素与第一个元素的大小,如果中间元素小于第一个元素,我们可以认为“偏移”量较小,使得最小元素依然在中间位置的前面(整个数组的前半部分)。
(3)如果中间元素大于第一个元素,则“偏移”量较大,使得最小元素在中间位置的后面(整个数组的后半部分)。
代码:
class Solution {
public:
int findMin(vector<int>& nums) {
int i=0, j=nums.size()-1;
while(i<j){
if(nums[i]<nums[j]){
return nums[i];
}
int mid=(i+j)/2;
if(nums[i]>nums[mid]){
j=mid;
}
else{
i=mid+1;
}
}
return nums[i];
}
};