LeetCode-896 单调数列

如果数组是单调递增或单调递减的,那么它是单调的

如果对于所有 i <= jA[i] <= A[j],那么数组 A 是单调递增的。 如果对于所有 i <= jA[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
 
class Solution {
    public boolean isMonotonic(int[] A) {
        int len=A.length;
        if(len<=1) return true;
        
        
        boolean increase=true;
        boolean decrease=true;
        
    //第一次遍历,判断是否单调增
        for (int i = 1; i <len; i++) {
            if(A[i]-A[i-1]<0){
                increase=false;
          break;
            }
        }
        
    //第二次遍历,判断是否单调减  
        for (int i = 1; i <len; i++) {
            if(A[i]-A[i-1]>0){
                decrease=false;
          break;
            }
        }

        if(increase||decrease){
            return true;
        }
        
        return  false;
    }
}
想法当然也很简单,两次遍历,第一遍判断是否单调增,第二次遍历,判断是否单调减。

那么一次遍历,应该怎么做呢?
Java有一个compareable接口。其中< = > 分别对应-1,0,1。
class Solution {
    public boolean isMonotonic(int[] A) {
        int store = 0;
        for (int i = 0; i < A.length - 1; ++i) {
           //比较当前值和后一个值得大小关系
            int c = Integer.compare(A[i], A[i+1]);
            if (c != 0) {
               //如不符合,就不是单调
                if (c != store && store != 0)
                    return false;
                store = c;
            }
        }

        return true;
    }
}        

 

 

猜你喜欢

转载自www.cnblogs.com/coscx/p/10726222.html