给定一个数组nums,其中nums[i]!=nums[i+1],找到极大值元素,并返回其索引。数组可能包含多个极大值,在这种情况下,返回任何一个极大值所在位置即可。
可以假设nums[-1]=nums[n]=负无穷大
/**
* 利用折半查找的思想,中间值,大于两边值的时候返回中间值
* 中间值索引小于等于0的时候,返回索引0
* 中间值索引大于等于数据最大索引的时候,返回最大索引
*
* @param arr
* @param middle
* @return
*/
public static int getMaxValueIndex(int[] arr, int middle) {
//中间值索引大于等于数据最大索引的时候,返回最大索引
if (middle >= arr.length - 1) {
return arr.length - 1;
}
//中间值索引小于等于0的时候,返回索引0
if (middle <= 0) {
return 0;
}
//大于两边值的时候返回
if (arr[middle] > arr[middle - 1] && arr[middle] > arr[middle + 1]) {
return middle;
} else if (arr[middle] <= arr[middle + 1]) {
middle = (middle + 1 + arr.length - 1) / 2;
return getMaxValueIndex(arr, middle);
} else {
middle = (middle - 1) / 2;
return getMaxValueIndex(arr, middle);
}
}