852.山脉数组的峰顶索引
描述
我们把符合下列属性的数组 A
称作山脉:
A.length >= 3
- 存在
0 < i < A.length - 1
使得A[0] < A[1] < ... A[i-1] < A[i] > A[i+1] > ... > A[A.length - 1]
给定一个确定为山脉的数组,返回任何满足 A[0] < A[1] < ... A[i-1] < A[i] > A[i+1] > ... > A[A.length - 1]
的 i
的值。
实例
输入:[0,1,0]
输出:1
输入:[0,2,1,0]
输出:1
题解
直接找数组的最大值就成
public int peakIndexInMountainArray(int[] A) {
int max = Integer.MIN_VALUE;
int maxIndex = 0;
for (int i = 0; i < A.length; i++) {
if (A[i] > max){
max = A[i];
maxIndex = i;
}
}
return maxIndex;
}
看到一个解法,使用二分法来做的,可以让这题更有意义点
mid
=(start+end)/2
- 如果
A[mid-1] < A[mid] > A[mid+1]
那么mid就是所求值 - 如果
A[mid-1] < A[mid]
那么start = mid;end = end
继续迭代 - 如果
A[mid] > A[mid+1]
那么start = start ;end = mid
继续迭代