题目解析(一)| 豆包MarsCode AI刷题

118 阅读2分钟

题目解析

题目描述
小S最近在研究一些数组的性质,发现了一类特别的数组——单调数组。数组被称为单调数组,如果它是单调递增或者单调递减的。

  • 单调递增数组:数组中的每个元素都不小于它前面的元素。
  • 单调递减数组:数组中的每个元素都不大于它前面的元素。

任务要求

编写一个程序,判断给定的数组 nums 是否为单调数组。如果数组是单调的,返回 True,否则返回 False

输入输出格式

  • 输入:一个整数数组 nums
  • 输出:如果数组是单调数组,返回 True;否则返回 False

示例

示例1
输入:nums = [1, 2, 2, 3]
输出:True
解释:该数组是单调递增的,因此返回 True

示例2
输入:nums = [6, 5, 4, 4]
输出:True
解释:该数组是单调递减的,因此返回 True

示例3
输入:nums = [1, 3, 2, 4, 5]
输出:False
解释:该数组既不是单调递增也不是单调递减,因此返回 False

思路分析

要判断一个数组是否是单调的,可以从两个角度来考虑:

  1. 检查单调递增:遍历数组,检查是否有任意一对相邻元素 nums[i] > nums[i+1],如果有,说明数组不是单调递增。
  2. 检查单调递减:遍历数组,检查是否有任意一对相邻元素 nums[i] < nums[i+1],如果有,说明数组不是单调递减。

如果以上两种情况都不存在,说明数组要么是单调递增,要么是单调递减。

实现思路

  1. 如果数组的长度小于等于 1,直接返回 True(因为长度为 0 或 1 的数组本身就是单调的)。
  2. 遍历数组,检查是否存在违反单调递增或递减的情况。
  3. 返回结果。

代码实现

python
def isMonotonic(nums):
    # 判断单调递增
    increasing = decreasing = True
    
    for i in range(1, len(nums)):
        if nums[i] < nums[i-1]:
            increasing = False
        if nums[i] > nums[i-1]:
            decreasing = False
    
    return increasing or decreasing

时间复杂度

  • 时间复杂度:O(n),其中 n 是数组 nums 的长度。我们需要遍历数组一次来检查是否符合单调递增或递减。
  • 空间复杂度:O(1),我们只使用了常数级别的额外空间。

边界情况

  1. 如果数组长度为 0 或 1,直接返回 True
  2. 如果数组的所有元素都相同,既满足单调递增也满足单调递减,返回 True