剑指offer java版

【剑指offer】问题11:旋转数组的最小数字

2019-02-14  本文已影响0人  蛋花汤汤

题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。

先上代码。

    /**
     * 旋转数组的最小数字
     */
    public int minNumberInRotateArray(int [] array) {
        if(array == null || array.length == 0)
            return -1;
        int index1 = 0;
        int index2 = array.length - 1;
        int indexMid = index1;
        while(array[index1] >= array[index2]){
            if(index2 - index1 == 1){
                indexMid = index2;
                break;
            }
            indexMid = (index1 + index2) / 2;
            if(array[index1] == array[indexMid] && array[indexMid] == array[index2]){
                return findMin(array, index1, index2);
            }
            if(array[index1] <= array[indexMid])
                index1 = indexMid;
            else if(array[index2] >= array[indexMid])
                index2 = indexMid;
        }
        return array[indexMid];

    }

    public int findMin(int[] arr, int start, int end){
        int min = arr[start];
        for(int i = start; i <= end; i++){
            if(arr[i] < min)
                min = arr[i];
        }
        return min;
    }
上一篇 下一篇

猜你喜欢

热点阅读