package com.interview.algorithms.array;
/**
* Created_By: stefanie
* Date: 14-8-21
* Time: 上午9:34
*/
public class C4_47_OccurrenceFinder {
public static int find(Integer[] array, Integer key){
int begin = find(array, key, 0, array.length - 1, true);
int end = find(array, key, 0, array.length - 1, false);
return end - begin + 1;
}
public static int find(Integer[] array, Integer key, int low, int high, boolean isFirst){
int mid = low + (high - low) / 2;
if(array[mid] == key){
if(isFirst){
if(mid == low || array[mid] != array[mid - 1]){ //first occurrence
return mid;
} else {
return find(array, key, low, mid -1, isFirst);
}
} else {
if(mid == high || array[mid] != array[mid + 1]){ //last occurrence
return mid;
} else {
return find(array, key, mid + 1, high, isFirst);
}
}
} else if(mid > key) return find(array, key, low, mid - 1, isFirst);
else return find(array, key, mid + 1, high, isFirst);
}
}