package com.interview.books.question300;
/**
* Created_By: stefanie
* Date: 15-1-20
* Time: 下午2:49
*/
public class TQ43_RepeatingElementFinder {
public int find(int[] array){
return find(array, 0, array.length - 1);
}
private int find(int[] array, int low, int high){
if(low >= high) return -1;
int mid = low + (high - low)/2;
if(array[mid] == array[mid + 1]){
if(mid == low || array[mid - 1] != array[mid]) return mid;
else {
return searchLow(array, low, mid - 1, array[mid]);
}
} else {
int found = find(array, low, mid);
if(found >= 0) return found;
else return find(array, mid + 1, high);
}
}
private int searchLow(int[] array, int low, int high, int key){
while(low < high){
int mid = low + (high - low)/2;
if(array[mid] >= key) high = mid;
else low = mid + 1;
}
return low;
}
public static void main(String[] args){
TQ43_RepeatingElementFinder finder = new TQ43_RepeatingElementFinder();
int[] array = new int[]{1,3,4,5,7,7,8,9,12,16,17,31};
System.out.println(finder.find(array)); //4
array = new int[]{1,3,4,5,7,8,9,12,16,17,17,31};
System.out.println(finder.find(array)); //9
}
}