【LeetCode刷題】896. 單調數列

StudyWinter發表於2020-12-19

如果陣列是單調遞增或單調遞減的,那麼它是單調的。

如果對於所有 i <= j,A[i] <= A[j],那麼陣列 A 是單調遞增的。 如果對於所有 i <= j,A[i]> = A[j],那麼陣列 A 是單調遞減的。

當給定的陣列 A 是單調陣列時返回 true,否則返回 false。

示例 1:

輸入:[1,2,2,3]
輸出:true

示例 2:

輸入:[6,5,4,4]
輸出:true

示例 3:

輸入:[1,3,2]
輸出:false

示例 4:

輸入:[1,2,4,5]
輸出:true

示例 5:

輸入:[1,1,1]
輸出:true

提示:

1 <= A.length <= 50000
-100000 <= A[i] <= 100000

==========================================================================================================================================
分析:
找差值不同號的

class Solution {
    public boolean isMonotonic(int[] A) {
        int flag = 0;
        for(int i=1;i<A.length;i++){
            //把第一個非0差值賦給flag
            if(flag == 0){
                flag = A[i] - A[i-1];
            }

            int temp = A[i]-A[i-1];
            //差值不同號,則非單調
            if(flag * temp < 0){
                return false;
            }
        }
        return true;
    }
}

法二:使用兩個變數記錄相鄰陣列的大小;最後判斷兩個變數

class Solution {
    public boolean isMonotonic(int[] A) {
        int i = 0;
        int j = 0;
        for(int k=0;k<A.length-1;k++){
            if(A[k] < A[k+1]){
                i++;
            }else if(A[k] > A[k+1]){
                j++;
            }
            if(i!=0 && j!=0){
                return false;
            }
        }
        return i*j==0;
    }
}

如果單調的話,i和j就不會變化,即兩個都為0
如果不單調的話,i和j都不為0。
參考:https://leetcode-cn.com/problems/monotonic-array

相關文章