1. 题目来源
2. 题目说明
3. 题目解析
方法一:暴力枚举+双指针
顺序枚举山峰,若满足当前枚举元素前后均比它小,则构成山峰,则使用双指针 l
,r
依次向左、右枚举高度递减的山峰数即可。
注意边界情况即可。
参见代码如下:
class Solution {
public:
int longestMountain(vector<int>& A) {
int n = A.size();
if (n < 3) return 0;
int res = 0;
for (int i = 1; i < n - 1; ++i) {
int x = A[i];
if (A[i - 1] < x && A[i + 1] < x) {
int l = i - 1, r = i + 1;
while (l > 0 && A[l - 1] < A[l]) l --;
while (r < n - 1 && A[r + 1] < A[r]) r ++;
res = max(res, r - l + 1);
}
}
return res;
}
};