解决方案


方法一:两次遍历

思路

如果数组单调递增或单调递减,那么该数组是单调的。由于 a <= bb <= c 暗示着 a <= c,我们只需要检查相邻元素以确定数组是单调递增(或是递减)。我们可以在一次遍历中检查每个属性。

算法

要检查数组 A 是否单调递增,我们将检查每个 i 是否对应有 A[i] <= A[i+1]。对单调检查是类似的。

复杂度分析

  • 时间复杂度:,其中 A 的长度。

  • 空间复杂度:


方法二:一次遍历

思路

要在一次遍历中执行该检查,我们将会处理由 组成的比较流,分别对应 <==,或 >。例如,对于数组 [1, 2, 2, 3, 0],我们将会看到数据流 (-1, 0, -1, 1)

算法

跟踪 store,它的值等于所看到的第一个非零比较值(如果存在)。一旦我们看到与之相反的比较值,那么答案就变成了 False

否则,每次比较值都必定在集合 中或是在 中,此时数组是单调的。

复杂度分析

  • 时间复杂度:,其中 A 的长度。

  • 空间复杂度: