题目
思路
- 之前做过一道类似的,注意一下,如果满足if(nums[start]<nums[middle] && nums[middle]<nums[end])的话,说明[start,end]是单调的,此时start位置的一定为最小值
- 如果middle等于start或者end的话,说明两者之一必有一个最小值,即可。
代码
public int findMin(int[] nums) {
if(nums.length==1) return nums[0];
int start=0,end=nums.length-1;
while(start<end){
int middle = start+ ((end-start)/2);
if(middle==start || middle==end) return Math.min(nums[start],nums[end]);
if(nums[start]<nums[middle] && nums[middle]<nums[end]) return nums[start];
if(nums[start]<nums[middle]) start=middle;
if(nums[middle]<nums[end]) end = middle;
}
return 0;
}