一、题目
1、题目描述
如果数组是单调递增或单调递减的,那么它是单调的。
如果对于所有 i < = j i <= j i<=j, n u m s [ i ] < = n u m s [ j ] nums[i] <= nums[j] nums[i]<=nums[j],那么数组 n u m s nums nums 是单调递增的。
如果对于所有 i < = j i <= j i<=j, n u m s [ i ] > = n u m s [ j ] nums[i]> = nums[j] nums[i]>=nums[j],那么数组 n u m s nums nums 是单调递减的。
当给定的数组 nums 是单调数组时返回 true,否则返回 false。
2、基础框架
class Solution {
public boolean isMonotonic(int[] nums) {
}
}
3、原题链接
二、解题报告
1、差值乘积法
1.1 思路分析
(
1
)
(1)
(1) 可以先用末尾元素减去头元素,以此暂时判断出整个数列的单调性,用
f
l
a
g
flag
flag 标记,单调递增为
1
1
1,单调递减为
−
1
-1
−1;然后用该标记数乘以每一个相邻两数的差值,结果若大于等于零,则单调性相同,否则,该数列不是单调数组。
(
2
)
(2)
(2) 利用循环不断得到相邻两数的差值,然后判断单调性是否与整体数列相符,即可得到整个数列是否单调。
1.2 复杂度分析
空间复杂度:
O
(
1
)
O(1)
O(1)。
时间复杂度:
O
(
n
)
O(n)
O(n)。
1.3 代码详解
class Solution {
public boolean isMonotonic(int[] nums) {
int size = nums.length;
if(size < 2){
return true;
}
int flag = nums[size - 1] - nums[0] < 0 ? -1 : 1;
for(int i = 1; i < size; i++){
if(flag * (nums[i] - nums[i - 1]) < 0){
return false;
}
}
return true;
}
}