「每日LeetCode」2021年3月7日

本文最后更新于:2023年3月19日 晚上

Lt.896. 单调数列

896. 单调数列

如果数组是单调递增或单调递减的,那么它是单调的
如果对于所有 i <= jA[i] <= A[j],那么数组 A 是单调递增的。 如果对于所有 i <= jA[i]> = A[j],那么数组 A 是单调递减的。
当给定的数组 A 是单调数组时返回 true,否则返回 false
示例 1:

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

示例 2:

1
2
输入:[6,5,4,4]
输出:true

示例 3:

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

示例 4:

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

示例  5:

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

提示:

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

思路

遍历所有数,直到当前数和上一个数不同,这时候判断是递增还是递减,之后的数如果不符合要求则直接返回 false。

改进

用两个状态记录是否有出现递增或递减状态,如果都有的话,返回 false。

解答

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**
* @param {number[]} A
* @return {boolean}
*/
var isMonotonic = function (A) {
if (A.length === 1) return true;
let isIncrease = null;
for (let i = 1; i < A.length; i++) {
if (isIncrease === null && A[i] !== A[i - 1]) {
isIncrease = A[i] > A[i - 1];
} else {
if (isIncrease && A[i] < A[i - 1]) return false;
else if (!isIncrease && A[i] > A[i - 1]) return false;
}
}
return true;
};

改进

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**
* @param {number[]} A
* @return {boolean}
*/
var isMonotonic = function (A) {
if (A.length === 1) return true;
let isIncrease = false,
isDecrease = false;
for (let i = 0; i < A.length - 1; i++) {
if (A[i] < A[i + 1]) isIncrease = true;
if (A[i] > A[i + 1]) isDecrease = true;
if (isIncrease && isDecrease) return false;
}
return true;
};