1. 程式人生 > >劍指offer:陣列中數值和下標相等的元素(java)

劍指offer:陣列中數值和下標相等的元素(java)


/**
 * 題目:
 *      假設一個單調遞增的數組裡的每個元素都是整數並且是唯一的。
 *      請程式設計實現一個函式找出陣列中任意一個數值等於其下標的元素。
 *      例如,在陣列{-3, -1, 1, 3, 5}中,數字3和它的下標相等。
 *
 * 解題思路:
 *      利用二分查詢
 *      如果數字的值大於陣列下標,下一輪查詢只需要從它左邊的數字中查詢即可。
 *      如果數字的值小於陣列下標,下一輪查詢只需要從它的右邊查詢即可。
 *      如果數字的值等於陣列下標,便找到一個數組中數值和下標相等的元素。
 */
public class P267_GetNumberSameAsIndex {
    public int GetNumberSameAsIndex(int[] array){
        if (array == null || array.length == 0) {
            return -1;
        }

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

            if (array[mid] > mid) {
                end = mid - 1;
            }
            if (array[mid] < mid) {
                start = mid + 1;
            }
        }
        return -1;
    }

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

        P267_GetNumberSameAsIndex test = new P267_GetNumberSameAsIndex();
        int result = test.GetNumberSameAsIndex(array);
        System.out.println(result);
    }
}