LeetCode 845. 陣列中的最長山脈
阿新 • • 發佈:2020-10-25
題目連結
845. 陣列中的最長山脈 Medium
題目分析
這個題的難度純粹就是嚇唬人的。。這個題的思路有很多,可以先找山峰,然後再向左右擴充套件。我的想法就是在遍歷過程中去維護一個雙指標,雙指標的距離就是當前山脈的長度。
遍歷過程中分以下幾種情況
- 如果
A[i] > A[i-1]
,那麼這裡可以看做山脈的起點,同時設定一個標誌位flag
來標記 - 如果
A[i] < A[i-1]
,那麼這裡可以看做山脈的下坡,我們內部再使用一個迴圈去尋找山脈的結束點。在尋找結束後,通過判斷flag && fast - slow >= 3
的條件,來進行res
的計算。 - 如果
A[i] == A[i-1]
slow
和flag
,然後讓fast
指向下一個元素即可。
程式碼實現
class Solution { public int longestMountain(int[] A) { int res = 0; int fast = 1; int slow = 0; boolean flag = false; while(fast < A.length){ if(A[fast] > A[fast - 1]){ fast++; flag = true; }else if(A[fast] < A[fast - 1]){ while(fast < A.length && A[fast] < A[fast - 1]){ fast++; } if(flag && fast - slow >= 3){ res = Math.max(res, fast - slow); } slow = fast - 1; flag = false; }else{ slow = fast; fast++; flag = false; } } return res; } }
總結
有時候不要被題目的難度嚇到自己了。