旋转数组的最小元素

  • 旋转数组的最小元素(折半查找)
    把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
    输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
    例如数组{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(null == array || array.length == 0){
            return 0;
        }

        //起始坐标
        int len = array.length;
        int left = 0;
        int rigth = len - 1;
        int mid = (left + rigth)/2;
        if(array[left] == array[rigth] && array[left] == array[mid]){
            //顺序查找
            return findMin(array);
        }

        while((rigth-left) != 1){
            mid = left + (rigth - mid)/2;
            // (1): 若中间元素<第一个元素,则最小元素在中间元素的左侧←,
            if(array[mid]<array[left]){
               rigth = mid;
            }else{
                left = mid;
            }
        }
        return array[rigth];
    }
    
    public int findMin(int [] array){
        int min = array[0];
        for(int i=1;i<array.length;i++){
            if(array[i]<min){
                min = array[i];
            }
        }
        return min;
    }
}
posted @ 2020-02-12 18:27  VVII  阅读(156)  评论(0)    收藏  举报