JZ6:旋转数组的最小数字

旋转数组的最小数字

http://www.nowcoder.com/practice/9f3231a991af4f55b95579b44b7a01ba

  public static int minNumberInRotateArray(int[] array){
        int len=array.length;
        if(len==0){
            return 0;
        }
        //采用二分查找
        int left=0,right=len-1;
        while(left<right){
            int mid=left+(right-left)/2;
            //类似[3,4,5,6,0,1,2],此时最小数字一定在mid的右边。
            if(array[mid]>array[right]){
                left=mid+1;
            }
            //类似 [1,0,1,1,1] 或者[1,1,1,0,1],此时最小数字不好判断在mid左边,还是右边,这时只好一个一个试
            else if(array[mid]<array[right]){
                right=mid;
            }
            //类似[2,2,3,4,5,6,6],此时最小数字一定就是array[mid]或者在mid的左边。因为右边必然都是递增的
            else{
                right=right-1;
            }
        }
        return array[left];
    }
剑指Offer题解 文章被收录于专栏

剑指Offer-Java版本题解

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-10 15:58
投个小米提前批试试水,先投一个岗位看看形势,不行就再沉淀一下投第二个岗位,莫辜负
Java抽象带篮子:我嘞个骚刚,已经开始研发6g了吗
投递小米集团等公司7个岗位
点赞 评论 收藏
分享
06-26 17:24
已编辑
宁波大学 golang
迷失西雅图:别给,纯kpi,别问我为什么知道
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务