题目地址:
https://leetcode.com/problems/find-peak-element/description/
给定一个长 n n n数组 A A A,找到 A A A中的严格大于其左右邻居的数的下标。题目保证 A A A中相邻的数不同。
如果 n = 1 n=1 n=1则返回 0 0 0。接下来可以二分,直接看分点 A [ m ] > A [ m + 1 ] A[m]>A[m+1] A[m]>A[m+1]是否成立,如果成立则说明左边一定有峰值,否则右边有峰值。代码如下:
class Solution {
public:
int findPeakElement(vector<int>& a) {
int l = 0, r = a.size() - 1;
while (l < r) {
int mid = l + (r - l >> 1);
if (a[mid] > a[mid + 1]) r = mid;
else l = mid + 1;
}
return l;
}
};
时间复杂度 O ( log n ) O(\log n) O(logn),空间 O ( 1 ) O(1) O(1)。