1. 程式人生 > 實用技巧 >leetcode 845. 陣列中的最長山脈 做題筆記

leetcode 845. 陣列中的最長山脈 做題筆記

題目:

我們把陣列 A 中符合下列屬性的任意連續子陣列 B 稱為 “山脈”:

B.length >= 3
存在 0 < i < B.length - 1 使得 B[0] < B[1] < ... B[i-1] < B[i] > B[i+1] > ... > B[B.length - 1]
(注意:B 可以是 A 的任意子陣列,包括整個陣列 A。)

給出一個整數陣列 A,返回最長 “山脈” 的長度。

如果不含有 “山脈” 則返回 0。

示例 1:

輸入:[2,1,4,7,3,2,5]
輸出:5
解釋:最長的 “山脈” 是 [1,4,7,3,2],長度為 5。
示例 2:

輸入:[2,2,2]
輸出:0
解釋:不含 “山脈”。

提示:

0 <= A.length <= 10000
0 <= A[i] <= 10000

簡單的一次遍歷即可

class Solution {
    public int longestMountain(int[] A) {
 int start = -1;
        int ans = 0;

        for (int i = 1; i < A.length; i++) {
            if (A[i - 1] < A[i]) { // 總是在上升階段,確定山脈起點 start
                if (i == 1 || A[i - 2] >= A[i - 1]) {
                    start = i - 1;
                }
            } else if (A[i - 1] > A[i]) {
                if (start != -1) {
                    ans = Math.max(ans, i - start + 1); // 總是在下降階段,計算山脈長度
                }

            } else {
                start = -1; // 平緩期重置起點
            }
        }

        return ans;
    }
}