单调数列
如果数组是单调递增或单调递减的,那么它是单调的。
如果对于所有 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) {
return isIncreasing(A) || isDecreasing(A);
}
private boolean isIncreasing(int[] A) {
for(int i=1;i<A.length;i++) {
if(A[i]<A[i-1]){
return false;
}
}return true;
} private boolean isDecreasing(int[] A) {
for(int i=1;i<A.length;i++) {
if(A[i]>A[i-1]){
return false;
}
}return true;
}
}
优化解法:
一次遍历
使用 inc 标记数组是否单调上升的,如果有下降,则将其置为 false;
使用 dec 标记数组是否单调递减的,如果有上升,则将其置为 false。
如果是单调的,那么最终inc和dec中一定有一个是true
class Solution {
public boolean isMonotonic(int[] A) {
boolean inc = true;
boolean dec = true;
for(int i=1;i<A.length;i++) {
if(A[i-1]<A[i]) {
dec = false;
}if(A[i-1]>A[i]){
inc = false;
}
}return dec || inc;
}
}