思路:

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;
    }
}
01-20 09:19