package com.interview.books.ccinterview; /** * Created_By: stefanie * Date: 14-12-13 * Time: 下午6:09 */ public class CC19_MagicIndex { public int index(int[] array){ int low = 0; int high = array.length - 1; while(low < high){ int mid = low + (high - low)/2; if(mid == array[mid]) return mid; else if(mid > array[mid]) low = mid + 1; else high = low - 1; } return -1; } public int indexDedup(int[] array){ return indexDedup(array, 0, array.length - 1); } private int indexDedup(int[] array, int low, int high){ if(low > high) return -1; int mid = low + (high - low)/2; if(mid == array[mid]) return mid; int left = indexDedup(array, low, Math.min(mid - 1, array[mid])); if(left >= 0) return left; return indexDedup(array, Math.max(mid + 1, array[mid]), high); } public static void main(String[] args){ CC19_MagicIndex finder = new CC19_MagicIndex(); int[] array = new int[]{-1,0,1,2,3,5,9,10}; System.out.println(finder.index(array)); array = new int[]{1,3,5,7,10}; System.out.println(finder.index(array)); array = new int[]{1,2,3,4,4,8,10,14}; System.out.println(finder.index(array)); System.out.println(finder.indexDedup(array)); } }