旋轉數組的最小數字11

題目描述:把一個數組最開始的若干個元素搬到數組的末尾,我們稱之爲數組的旋轉。 輸入一個非減排序的數組的一個旋轉,輸出旋轉數組的最小元素。 例如數組{3,4,5,1,2}爲{1,2,3,4,5}的一個旋轉,該數組的最小值爲1。

public static void main(String[] args) {
        int[] array = {3, 4, 5, 1, 2};
        System.out.println(min(array));
    }

    private static int min(int[] array) {
        if (array.length == 0) {
            return -1;
        }
        int left = 0;
        int right = array.length - 1;
        int mid = left;
        // 當最左邊值大於等於最右邊時候
        while (array[left] >= array[right]) {
            // 如果此時數組只剩下兩個數值
            if (right - left == 1) {
                // 最小的就是右邊
                mid = right;
                break;
            }
            // 如果數組長度是2個以上
            mid = (left + right) / 2;
            // 如果最左邊小於等於中間,說明最小值在後半部分,把mid位置標記爲最左側如{3,4,5,1,2}
            if (array[mid] >= array[left])
                left = mid;
                // 如果最左側大於等於中間值,說明最小值在前半部分,把mid位置標記爲最右側{4,5,1,2,3}
            else if (array[mid] <= array[right])
                right = mid;
        }
        return array[mid];
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章