896. Monotonic Array - Easy
阿新 • • 發佈:2018-12-02
1-1 all lse clas 時間 返回 solution 基礎 smon
An array is monotonic if it is either monotone increasing or monotone decreasing.
An array A
is monotone increasing if for all i <= j
, A[i] <= A[j]
. An array A
is monotone decreasing if for all i <= j
, A[i] >= A[j]
.
Return true
if and only if the given array A
is monotonic.
Example 1:
Input: [1,2,2,3]
Output: true
Example 2:
Input: [6,5,4,4]
Output: true
Example 3:
Input: [1,3,2]
Output: false
Example 4:
Input: [1,2,4,5]
Output: true
Example 5:
Input: [1,1,1]
Output: true
Note:
1 <= A.length <= 50000
-100000 <= A[i] <= 100000
M1: two pass
一開始試圖在one pass判斷兩種單調狀態,但無法處理 {1, 1, 0}這樣的情況,必須得two pass分別判斷是單調增還是單調減,再把結果取或。需要遍歷兩次數組,不是最優。
時間:O(N),空間:O(1)
class Solution { public boolean isMonotonic(int[] A) { return increasing(A) || decreasing(A); } private boolean increasing(int[] A) { for(int i = 0; i + 2 < A.length; i++) { if(A[i] <= A[i+1]) { if(A[i+1] > A[i+2])return false; } else return false; } return true; } private boolean decreasing(int[] A) { for(int i = 0; i + 2 < A.length; i++) { if(A[i] >= A[i+1]) { if(A[i+1] < A[i+2]) return false; } else return false; } return true; } }
M2: one pass
在M1的基礎上,用兩個boolean變量表示增還是減。先把兩個值都初始化為true。如果有元素遞減,increase=false;如果有元素遞增,decrease=false。最後返回increase或decrease
時間:O(N),空間:O(1)
class Solution { public boolean isMonotonic(int[] A) { if(A.length == 1) return true; boolean increasing = true; boolean decreasing = true; for(int i = 0; i + 1 < A.length; i++) { if(A[i] < A[i+1]) decreasing = false; if(A[i] > A[i+1]) increasing = false; } return increasing || decreasing; } }
896. Monotonic Array - Easy