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.
思路一:从头遍历,找到数值跳水的地方。复杂度O(n)
class Solution {
public int findMin(int[] nums) {
if(nums.length==0) return 0;
int min = nums[0];
for(int i=0;i<nums.length;i++){
if(nums[i]<min) return nums[i];
}
return min;
}
}
思路二:这其实是一道经典二分搜索,复杂度logn,因为升序数列中寻找最小点,所以value(start)<value(end),则返回start,否则
最小点在start与end间,二分查找处即可。
class Solution {
public int findMin(int[] nums) {
if(nums.length==0) return 0;
int start = 0;
int end = nums.length-1;
while(start<end){
if(nums[start]<nums[end]){
return nums[start];
}else{
int mid = (start + end)/2;
if(nums[mid]>=nums[start]){//注意这里是大于等于,针对有这种情况[2,1]
start = mid+1;
}else{
end = mid;
}
}
}
return nums[start];
}
}