941. [陣列][雙指標]有效的山脈陣列
阿新 • • 發佈:2020-11-03
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; } }