//845. 数组中的最长山脉
/*
* 遍历数组,找到每个山顶,即:此元素比相邻两个元素的值都要大
* 针对每个山顶,去找左边的界限(从左到右递增),找右边的界限(从左到右递减)
* 时间复杂度:O(n)
* 解释:1、遍历每个节点是n,
* 针对每个节点,遍历他的边界,整体来看,总的是n
* 换个思路:
* 2、针对每个节点,最多只会被遍历两遍
* -山顶只会在最外面的循环中遍历一遍
* -其他节点只能属于其中某个山,内部循环会遍历一遍,再加上外层循环的一遍
* 所以是2*n -> O(n)
*/
class Solution {
public:
int longestMountain(vector<int>& A) {
if (A.size() < 3) return 0;
int ans = 0;
for (int i = 1; i < A.size() - 1; i++) {
if (A[i - 1] < A[i] && A[i] > A[i + 1]) {
int cnt = 0;
for (int j = i - 1; j >= 0; j--)
if (A[j] < A[j + 1]) cnt++;
else break;
for (int j = i + 1; j < A.size(); j++)
if (A[j - 1] > A[j]) cnt++;
else break;
cnt++;
ans = max(ans, cnt);
}
}
return ans;
}
};
LeetCode845. 数组中的最长山脉
最新推荐文章于 2020-10-27 10:42:11 发布