题目来自LeetCode,链接:monotonic-array。具体描述为:如果数组是单调递增或单调递减的,那么它是单调的。如果对于所有 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
这道题就很简单了,首先根据数组头尾数字判断是递增还是递减的,然后根据是递增或者不递增,遍历数组,判断相邻两个数字是否满足单调性要求,一旦有一组不满足,直接返回false,遍历完成即可返回true。时间复杂度为 O ( N ) O(N) O(N),空间复杂度为 O ( 1 ) O(1) O(1)。
JAVA版代码如下:
class Solution {
public boolean isMonotonic(int[] A) {
if (A[0] < A[A.length - 1]) {
for (int i = 0; i < A.length - 1; ++i) {
if (A[i] > A[i + 1]) {
return false;
}
}
return true;
}
else {
for (int i = 0; i < A.length - 1; ++i) {
if (A[i] < A[i + 1]) {
return false;
}
}
return true;
}
}
}
提交结果如下:
Python版代码如下:
class Solution:
def isMonotonic(self, A: List[int]) -> bool:
if A[0] < A[-1]:
for i in range(len(A) - 1):
if A[i] > A[i + 1]:
return False
return True
else:
for i in range(len(A) - 1):
if A[i] < A[i + 1]:
return False
return True
提交结果如下: