6.旋转数组的最小数字

题目描述

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。

题目解答

import java.util.ArrayList;
public class Solution {
    public int minNumberInRotateArray(int [] array) {
        if(array==null || array.length==0){
            return 0;
        }
        int low=0,high=array.length-1;
        while(low<high){
            int mid=low+(high-low)/2;
            if(array[mid]>array[high]){ //[3,4,5,6,0,1,2],最小数字一定在mid右边
                low=mid+1;
            }else if(array[mid]==array[high]){ // [1,0,1,1,1] 或者[1,1,1,0,1] ,最小数字不好判断在mid左边还是右边
                high=high-1;
            }else{ //[2,2,3,4,5,6,6],最小数字一定在mid或者mid的左边
                high=mid; 
            }
        }
        return array[low];
    }
}

二分法

posted @ 2018-12-14 16:38  chan_ai_chao  阅读(132)  评论(0编辑  收藏  举报