剑指offer之java篇之旋转数组(二)

来源:互联网 发布:淘宝上传视频要收费吗 编辑:程序博客网 时间:2024/06/04 08:21

    题:旋转数组求最小值。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];
    }

原创粉丝点击