思路:
1.首先找到上山点,用一个变量 j 来开始上山。
2.计算山脉的长度。 长度分为两部分,一部分是上山,一部分是下山。 这题要注意边界。
3.保存山脉的长度 j - i + 1。 为什么要 +1 ?因为我们之前写的上山点是 A[ i ] > A [ i - 1] 。 i - 1 的时候,才是上山点。 j 是山脚的位置。
4.更新 i = j -1 。 为什么要 -1? 因为判断山脉结束时 A[ j ] < A [ j - 1] 不成立,所以 j - 1 才是山脚的位置。
代码:
class Solution { public int longestMountain(int[] A) { int len = A.length; if(len < 3) return 0; int j; int ans = 0; for(int i = 1; i < len; i++) { boolean flag = false; if(A[i] > A[i-1]) { j = i; while(j < len && A[j] > A[j-1]) { j++; } while(j < len && A[j] < A[j-1]) { j++; flag = true; } if(flag == true){ ans = Math.max(ans,j-i+1); } i = j-1; } } return ans; } }