如果数组是单调递增或单调递减的,那么它是单调的。
如果对于所有
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
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; } }
原文:https://www.cnblogs.com/coscx/p/10726222.html