1. 程式人生 > 實用技巧 >LeetCode 845. 陣列中的最長山脈

LeetCode 845. 陣列中的最長山脈

題目連結

845. 陣列中的最長山脈 Medium

題目分析

這個題的難度純粹就是嚇唬人的。。這個題的思路有很多,可以先找山峰,然後再向左右擴充套件。我的想法就是在遍歷過程中去維護一個雙指標,雙指標的距離就是當前山脈的長度。
遍歷過程中分以下幾種情況

  • 如果A[i] > A[i-1],那麼這裡可以看做山脈的起點,同時設定一個標誌位flag來標記
  • 如果A[i] < A[i-1],那麼這裡可以看做山脈的下坡,我們內部再使用一個迴圈去尋找山脈的結束點。在尋找結束後,通過判斷flag && fast - slow >= 3的條件,來進行res的計算。
  • 如果A[i] == A[i-1]
    ,這裡沒啥好說的,相同的元素,直接重置slowflag,然後讓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;
    }
}

總結

有時候不要被題目的難度嚇到自己了。