0
点赞
收藏
分享

微信扫一扫

剑指offer第十九天-----旋转数组的最小数字

小安子啊 2022-01-20 阅读 82

常规的搜索题 拿到手就是二分查找

  1. 这道题思想关键是二分的判断与改变,如果中间值<end值,说明右边序列处于那个递增状态中,最小值在左边,end=mid
  2. 如果中间值>end值,说明右边的序列已经由于旋转被改变顺序,所以start=mid+1
  3. 关键是有一个中间值==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];
    }
}

千万别忘了 mid值等于end的情况

举报

相关推荐

0 条评论