這是悅樂書的第345次更新,第369篇原創
java
今天介紹的是LeetCode算法題中Easy級別的第210題(順位題號是896)。若是數組單調遞增或單調遞減,則數組是單調的。若是對於全部i <= j,A[i] <= A[j],則數組A是單調遞增的。若是對於全部i <= j,A[i] >= A[j],則數組A是單調遞減的。當且僅當給定的數組A是單調的時,才返回true。例如:算法
輸入:[1,2,2,3]
輸出:true數組
輸入:[6,5,4,4]
輸出:true數據結構
輸入:[1,3,2]
輸出:falsecode
輸入:[1,2,4,5]
輸出:trueclass
輸入:[1,1,1]
輸出:true變量
注意:數據結構與算法
1 <= A.length <= 50000循環
-100000 <= A [i] <= 100000
方法
使用兩個循環,一個判斷是否遞增,一個判斷是否遞減,只要其中一個符合條件便可返回true。
public boolean isMonotonic(int[] A) { return isIncrease(A) || isDecrease(A); } public boolean isIncrease(int[] A) { for (int i=0; i<A.length-1; i++) { if (A[i] > A[i+1]) { return false; } } return true; } public boolean isDecrease(int[] A) { for (int i=0; i<A.length-1; i++) { if (A[i] < A[i+1]) { return false; } } return true; }
也能夠只是用一次循環。
public boolean isMonotonic2(int[] A) { boolean isincrease = true; boolean isdecrease = true; int n = A.length; for (int i=0; i<n-1; i++) { isincrease = isincrease && A[i] <= A[i+1]; isdecrease = isdecrease && A[i] >= A[i+1]; } return isincrease || isdecrease; }
針對第二種解法,咱們分兩種狀況分別處理了isincrease、isdecrease兩個變量。
public boolean isMonotonic3(int[] A) { boolean isincrease = true; boolean isdecrease = true; int n = A.length; for (int i=0; i<n-1; i++) { if (A[i] < A[i+1]) { isdecrease = false; } if (A[i] > A[i+1]) { isincrease = false; } } return isincrease || isdecrease; }
也能夠藉助包裝類Integer
的compare
方法,比較相鄰兩個元素的大小,另外使用一個變量存儲上一次比較的結果,每次作完新的比較後,用新的結果和前一次的結果比較,只要先後兩次比較結果不一樣,能夠直接返回false。
public boolean isMonotonic4(int[] A) { int flag = 0, n = A.length; for (int i=0; i<n-1; i++) { int num = Integer.compare(A[i], A[i+1]); if (num != 0) { if (flag != 0 && flag != num) { return false; } flag = num; } } return true; }
算法專題目前已連續日更超過六個月,算法題文章213+篇,公衆號對話框回覆【數據結構與算法】、【算法】、【數據結構】中的任一關鍵詞,獲取系列文章合集。
以上就是所有內容,若是你們有什麼好的解法思路、建議或者其餘問題,能夠下方留言交流,點贊、留言、轉發就是對我最大的回報和支持!