1.题意
Mountain Array 的定义:
Array.length >= 3
存在某些下标i满足
0 < i < A.length - 1
such thatA[0] < A[1] < ... A[i-1] < A[i] > A[i+1] > ... > A[A.length - 1]
2.题意
这道题是要找出数组的峰值。
用二分查找的思路解决问题,与二分查找不同的是,这道题不是比较nums[lo], nums[mi], nums[hi]之间的关系,是比较
nums[mi-1], nums[mi], nums[mi+1] 分为三种情况
(1) nums[mi-1] < nums[mi] < nums[mi+1]
lo = mi + 1
(2) nums[mi-1] > nums[mi] > nums[mi+1]
hi = mi - 1
(3) nums[mi-1] < nums[mi] > nums[mi+1]
return mi;
3.代码实现
class Solution {
public:
int peakIndexInMountainArray(vector<int>& A) {
int lo = 0;
int hi = A.size() - 1;
while(lo <= hi)
{
int mi = lo + (hi - lo) / 2;
if(A[mi - 1] <= A[mi] && A[mi] > A[mi + 1])
return mi;
else if(A[mi - 1] < A[mi] && A[mi] < A[mi + 1])
lo = mi + 1;
else if(A[mi - 1] > A[mi] && A[mi] > A[mi + 1])
hi = mi - 1;
}
return lo;
}
};
//应该还有简化的版本。