896. 单调数列

57 阅读1分钟

题目 leetcode.cn/

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

示例

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

提示

  • 1 <= nums.length <= Math.pow(10, 5)
  • -Math.pow(10, 5) <= nums[i] <= Math.pow(10, 5)

思路

  • 当数组内只有一个元素时,必定是单调的,返回true
  • 当数组的第一项小于最后一项时,暂定为单调递增数组,遍历数组,只要出现前一项大于后一项,则证明不是单调递增数组,返回false
  • 当数组的第一项大于最后一项时,暂定为单调递减数组,遍历数组,只要出现前一项小于后一项,则证明不是单调递减数组,返回false
  • 当数组第一项等于最后一项时,只有一种情况是单调数组,就是数组所有项都相等

代码

function isMonotonic(nums: number[]): boolean {
    if(nums.length === 1) return true;
    if(nums[0] < nums[nums.length - 1]){
        for(let i = 0; i < nums.length - 1; i++){
            if(nums[i] > nums[i+1]) return false
        }
    }else if(nums[0] > nums[nums.length - 1]){
        for(let i = 0; i < nums.length - 1; i++){
            if(nums[i] < nums[i+1]) return false
        }
    }else{
        for(let i = 0; i < nums.length - 1; i++){
            if(nums[i] !== nums[i+1]) return false
        }
    }
    return true;
};