常规的搜索题 拿到手就是二分查找
- 这道题思想关键是二分的判断与改变,如果中间值<end值,说明右边序列处于那个递增状态中,最小值在左边,end=mid
- 如果中间值>end值,说明右边的序列已经由于旋转被改变顺序,所以start=mid+1;
- 关键是有一个中间值==end值的情况,这种情况很复杂,以上两种情况都可能发生。比如2 2 2 1 2或者1 0 1 1 1,这种情况下mid的右边就很怪 所以就需要直接让end=end-1 再慢慢判断
import java.util.ArrayList;
public class Solution {
public int minNumberInRotateArray(int [] array) {
int len=array.length;
int start=0,end=len-1,mid;
while(start<end){
mid=(start+end)/2;
if(array[mid]>array[end]) start=mid+1;
else if(array[mid]<array[end]) end=mid;
else end--;
}
return array[start];
}
}