力扣 896. 单调数列

题目说明

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

如果对于所有 i <= j,A[i] <= A[j],那么数组 A 是单调递增的。 如果对于所有 i <= j,A[i]> = A[j],那么数组 A 是单调递减的。

当给定的数组 A 是单调数组时返回 true,否则返回 false。

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

示例

例1

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

例2

1
2
3
4
5
6
7
8
9
10
输入:[1,2,2,3]
[6,5,4,4]
[1,3,2]
[1,2,4,5]
[1,1,1]
输出:true
true
false
true
true

笔者理解

此题是一道数组算法问题,在力扣题库中被定义为简单题。

解法

当笔者阅读完此题后,发现此题还是比较容易,遍历比较数组,注意两数相等符合单调即可,让我们来看看具体如何实现的吧。

实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public boolean isMonotonic(int[] A) {
if(A.length<3){ return true;}
//只有一两个数时,肯定是单调数列

int isIncrease = 2;
//数列初始单调性

int temp;
//每两个数之间的单调性

for(int i=1;i<A.length;i++){
if(A[i]==A[i-1]){
continue;
//两数相等就跳过
}
if(isIncrease==2){
isIncrease = A[i]>A[i-1]?1:0;
//除去一开始就相等的数,取第一次出现不同数之间的单调性
}
else{
temp = A[i]>A[i-1]?1:0;
if(isIncrease!=temp){
return false;
//一旦出现两数与最初单调性不同时即返回false
}
}
}
return true;
}

时间和空间效率都还行,可见此解法还比较适合此题;

image.png

总结

本题是今天的每日一题,难度是简单,感兴趣的朋友都可以去尝试一下,此题还有其他更多的解法,朋友们可以自己逐一尝试。