LeetCode.896-單調數組(Monotonic Array)

這是悅樂書的第345次更新,第369篇原創

java

01 看題和準備

今天介紹的是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

    方法

02 第一種解法

使用兩個循環,一個判斷是否遞增,一個判斷是否遞減,只要其中一個符合條件便可返回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;
}


03 第二種解法

也能夠只是用一次循環。

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;
}


04 第三種解法

針對第二種解法,咱們分兩種狀況分別處理了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;
}


05 第四種解法

也能夠藉助包裝類Integercompare方法,比較相鄰兩個元素的大小,另外使用一個變量存儲上一次比較的結果,每次作完新的比較後,用新的結果和前一次的結果比較,只要先後兩次比較結果不一樣,能夠直接返回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;
}


06 小結

算法專題目前已連續日更超過六個月,算法題文章213+篇,公衆號對話框回覆【數據結構與算法】、【算法】、【數據結構】中的任一關鍵詞,獲取系列文章合集。

以上就是所有內容,若是你們有什麼好的解法思路、建議或者其餘問題,能夠下方留言交流,點贊、留言、轉發就是對我最大的回報和支持!

相關文章
相關標籤/搜索