题目
题解
//for循环实现
public static int peakIndexInMountainArrayFor(int[] arr) {
int max = 0;
int index = 0;
for(int i=0;i<arr.length;i++){
if(max <= arr[i]){//只需要遍历到最大值即可
max = arr[i];
index = i;
}else{
break;
}
}
return index;
}
//使用二分法实现
public static int peakIndexInMountainArray(int[] arr) {
int max = 0;
//左右下标
int indexLeft = 0;
int indexRight = arr.length-1;
int index = 0;
boolean kip = false;
boolean add = true;
while(!kip){
//通过add属性对下下标进行加减
if(add){
index = index + (indexRight - indexLeft) / 2;
}else{
index = index - (indexRight - indexLeft) / 2;
}
int temp = arr[index];
//当这个数同时大于左右两边即符合要求
if(temp > arr[index-1] && temp > arr[index+1]){
kip = true;
}else if(temp > arr[index-1]){
//只比左边大,则将左指针定位到当前的index上,然后index向右移
indexLeft = index;
add=true;
}else{
//比左边数小,则将右指针定位到当前index上,然后index向左移
indexRight = index;
add=false;
}
}
return index;
}