题:旋转数组求最小值。1 2 3 4 5 6 旋转变为 3 4 5 6 1 2
分析:这种基本有序比较容易想到二分法。分为以下几种情况:
1) array[mid]>array[right]说明一定在右边,而且这个mid一定不是最小的。
2) array[mid]<array[right]说明一定在左边,这mid不一定不是最小的。
3) 不用考虑了,全部相等的,直接输出随便一个即可。
代码:
public static int minNumberInRotateArray(int [] array) {
int length=array.length;
if(length<=0)
return 0;
if(length==1)
return array[0];
int left=0,right=length-1,mid=(left+right)/2;
while(right-left>1){
mid=(left+right)/2;
if(array[mid]>array[right])
left=mid;
else if(array[mid]<array[right])
right=mid;
else
break;
}
return array[right]>array[left]?array[left]:array[right];
}