public static void Main()
Console.WriteLine("Hello World");
Console.WriteLine(GetMaxIndex(new int[] {1,2,3,4,3,1}));
Console.WriteLine(GetMaxIndex(new int[] {1,2,3,4,3,2,1,0}));
Console.WriteLine(GetMaxIndex(new int[] {1,4,6}));
Console.WriteLine(GetMaxIndex(new int[] {6,3,2,1}));
Console.WriteLine(GetMaxIndex(new int[] {4,4,3,3,6,2,1}));
public static int GetMaxIndex(int[] arr){
if(arr == null || arr.Length == 0)
return GetMaxIndex(arr, 1, arr.Length);
public static int GetMaxIndex(int[] arr, int left, int right){
int mid = left + (right - left)/2;
if(arr[mid] > arr[mid-1] && (mid+1 == arr.Length || arr[mid] > arr[mid+1])){
}else if((mid+1 < arr.Length && arr[mid] < arr[mid+1])) {
public static int GetMaxIndexRecursive(int[] arr, int left, int right){
int mid = left + (right - left)/2;
if(mid == 0 || mid == arr.Length - 1
|| (arr[mid] > arr[mid-1] && arr[mid] > arr[mid+1])){
if(mid+1 < arr.Length && arr[mid] < arr[mid+1]){
return GetMaxIndexRecursive(arr, mid, right);
}else if(mid > 0 && arr[mid-1] > arr[mid]){
return GetMaxIndexRecursive(arr, left, mid);