1. 程式人生 > >劍指offer:旋轉陣列中的最小數字(java)

劍指offer:旋轉陣列中的最小數字(java)

/**
 *
 題目:
    把一個數組最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。
    輸入一個非減排序的陣列的一個旋轉,輸出旋轉陣列的最小元素。
    例如陣列{3,4,5,1,2}為{1,2,3,4,5}的一個旋轉,該陣列的最小值為1。
     NOTE:給出的所有元素都大於0,若陣列大小為0,請返回0。

 */

public class P82_MinNumberInrotateArray {
    public int minNumberInRotateArray(int [] array) {
        int result = 0;
        if (array == null || array.length == 0) {
            return result;
        }

        int start = 0;
        int end = array.length - 1;
        while (array[start] >= array[end]) {
            int mid = (start + end) / 2;

            if (end - start == 1) {
                result = array[end];
                break;
            } else if (array[start] == array[end] && array[start] == array[mid]) {
                result = InorderSearch(array);
                break;
            } else if (array[mid] >= array[start]) {
                start = mid;
            } else if (array[mid] <= array[end]) {
                end = mid;
            }
        }

        return result;
    }

    public int InorderSearch(int[] array) {
        int result = array[0];
        for(int i =1;i<array.length;i++) {
            if (array[i] < result) {
                result = array[i];
            }
        }
        return result;
    }

    public static void main(String[] args) {
        int[] array = {1, 0, 1, 1, 1};

        P82_MinNumberInrotateArray test = new P82_MinNumberInrotateArray();

        int result = test.minNumberInRotateArray(array);
        System.out.println(result);
    }
}