leetcode 845. 陣列中的最長山脈 做題筆記
阿新 • • 發佈:2020-10-25
題目:
我們把陣列 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; } }