我们把符合下列属性的数组 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 的值。
二分。
int findPeakIndex(const vector<int>& m, int lo, int hi) {
if (lo > hi)
return -1;
int mid = (lo + hi) / 2;
if (mid > 0 && mid < m.size() - 1 && m[mid - 1] < m[mid] && m[mid] > m[mid + 1])
return mid;
if (mid == 0 || m[mid - 1] < m[mid])
return findPeakIndex(m, mid + 1, hi);
return findPeakIndex(m, lo, mid - 1);
}
int peakIndexInMountainArray(vector<int>& A) {
return findPeakIndex(A, 0, A.size() - 1);
}