领扣(LeetCode)单调数列 个人题解

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

如果对于所有 i <= jA[i] <= A[j],那么数组 A 是单调递增的。 如果对于所有 i <= jA[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. 1 <= A.length <= 50000
  2. -100000 <= A[i] <= 100000

拿到这个题,首先的想法 是判断是哪种单调方式,然后接下来的数字如果不符合这个单调模式,则输出错误。但是实现起来有些麻烦。

然后简化办法,设立两个标志,如果出现了单调递增,则绝不可能是单调递减,则把递减的标志设为假,反之亦然。最后输出两个结果相并的结果,就是答案。

在这之间期间走了弯路,使用了排序,然后再让原本的数组和排序后的升序降序分别比较,如果不一致则输出错误,导致运行时间变慢许多。

代码如下:

 1 class Solution {
 2     public boolean isMonotonic(int[] A) {
 3         int[] tmp = A.clone();
 4         boolean mark1 = true;
 5         boolean mark2 = true;
 6         for (int i = 0; i < A.length-1; i++) {
 7             if (A[i] > A[i+1])
 8                 mark1=false;
 9             else if (A[i] < A[i+1])
10                 mark2 = false;
11 
12         }
13 
14         return mark1 | mark2;
15     }
16 }
原文地址:https://www.cnblogs.com/axiangcoding/p/10003720.html