单调数列

112 阅读1分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第8天,点击查看活动详情

题目描述

如果数组是单调递增或单调递减的,那么它是 单调 的。 如果对于所有 i <= j,nums[i] <= nums[j],那么数组 nums 是单调递增的。 如果对于所有 i <= j,nums[i]> = nums[j],那么数组 nums 是单调递减的。 当给定的数组 nums 是单调数组时返回 true,否则返回 false。(出自力扣)

  • 示例1:
输入: nums = [1,2,2,3]
输出: true
  • 示例2:
输入: nums = [6,5,4,4]
输出: true
  • 示例3:
输入: nums = [1,3,2]
输出: false

提示:

  • 1 <= nums.length <= 105
  • -105 <= nums[i] <= 105

思路分析

单调数列,就是在一个数组里面,它从头到尾一直递增(从小排到大),或者一直递减(从大排到小);对于这种,我们只需要一个循环,和两个布尔变量;布尔变量分别表示是否为递增和递减;循环整个数组,即可取到数组中的每一个元素,拿当前元素和下一个元素比大小值,若是当前值大于下一个值,scending 就改为 false,若是当前值小于下一个值,那么degression就改为 false;待循环结束后再判断scendingdegression的值,若是两个有一个是true的话,那么这个数组就是递增或者递减顺序,也就是说这个数组就是单调数列;若是两个值都是false的话,那么这个数组就不是单调数组了,若是两个值都是true,那么这个数组也是单调数组。

AC代码

let arr = [1,2,3,4,5]
function monotonous(arr) {
  let scending = true;
  let degression = true;
  for(let i = 0; i<arr.length-1; i++) {
    if(arr[i] > arr[i+1]) {
      degression = false;
    }
    if(arr[i+1] > arr[i]) {
      scending = false;
    }
  }
  console.log(scending || degression)
}
monotonous(arr)

总结

这道算法题是非常简单的一道题了,无论是递增或者是递减,只要有一次判断和其他的判断不一样,那么,它就不是单调数列了,要不就是一直都是小于,要不就是一直都是大于。