先找到比左右两侧大的数 然后以这个数为中心 依次找到左右的长度
class Solution {
public int longestMountain(int[] arr) {
if(arr == null || arr.length <= 2) return 0;
int max = 0;
for(int i = 1; i < arr.length - 1; i++){
if(arr[i] > arr[i - 1] && arr[i] > arr[i + 1]){
int left = i - 1;
int right = i + 1;
while(left > 0 && arr[left] > arr[left - 1]) --left;
while(right < arr.length - 1 && arr[right] > arr[right + 1]) ++right;
max = Math.max(max, right - left + 1);
i = right;
}
}
return max;
}
}
本文介绍了一种寻找数组中最长‘山脉’子数组的方法。通过一次遍历,找到比其左右两侧都大的元素作为山脉顶点,并以此为中心向两边扩展直到不再符合山脉定义。这种方法能有效地解决此类问题。
1622

被折叠的 条评论
为什么被折叠?



