1. 程式人生 > 實用技巧 >941. [陣列][雙指標]有效的山脈陣列

941. [陣列][雙指標]有效的山脈陣列

941. 有效的山脈陣列

我們可以以線性掃描或雙指標模擬爬山的過程。

線上性掃描演算法中,核心的思路是使用計數的方法,避免了出現多座山脈,或是平坡的情況。雙指標的解法是類似的。

方法一:線性掃描

class Solution {
    public boolean validMountainArray(int[] A) {
        int N = A.length;
        int i = 0;
        // 遞增掃描
        while (i + 1 < N && A[i] < A[i + 1]) {
            i++;
        }
        // 最高點不能是陣列的第一個位置或最後一個位置
        if (i == 0 || i == N - 1) {
            return false;
        }
        // 遞減掃描
        while (i + 1 < N && A[i] > A[i + 1]) {
            i++;
        }
        return i == N - 1;
    }
}

方法二:雙指標

class Solution {
    public boolean validMountainArray(int[] A) {
        int N = A.length;
        int left = 0;
        int right = N - 1;
        while (left + 1 < N && A[left] < A[left + 1]){
            left++;
        }
        while (right > 0 && A[right - 1] > A[right]){
            right--;
        }
        return left > 0 && right < N - 1 && left == right;
    }
}