package com.anuragkapur.ctci.recursionanddp;
/**
* @author anuragkapur
*/
public class Prob9_3_MagicIndex {
/**
* Binary search approach to find magic index
*
* Run time complexity: O(log n)
*
* @param a
* @param start
* @param end
* @return
*/
public int findMagicIndex(int a[], int start, int end) {
if (end < start) {
return -1;
} else if (end == start && a[start] == start) {
return start;
} else if (end == start && a[start] != start) {
return -1;
} else {
int mid = ((end - start) / 2) + start;
if (a[mid] == mid) {
return mid;
} else if (a[mid] < mid){
// check right half
return findMagicIndex(a, mid+1, end);
} else {
// check left half
return findMagicIndex(a, start, mid-1);
}
}
}
}