题目分析
题目要求判断一个数组是否是单调的。一个数组被认为是单调的,如果它是单调递增的或单调递减的。
- 单调递增:对于所有
i,nums[i] <= nums[i+1]。 - 单调递减:对于所有
i,nums[i] >= nums[i+1]。
通过上述代码,我们可以通过一次遍历来检查数组是否满足单调性的条件。具体步骤如下:
- 初始化两个布尔变量
increasing和decreasing为True。 - 遍历数组,从第二个元素开始,与前一个元素进行比较。
- 如果发现任何一对元素不满足单调递增或单调递减的条件,相应地将
increasing或decreasing设置为False。 - 最后,如果数组是单调递增或单调递减的,则返回
True;否则,返回False。
代码详解
函数定义
def solution(nums: list) -> bool:
- 这里定义了一个名为
solution的函数,它接受一个列表nums作为参数,并返回一个布尔值。
初始化变量
increasing = decreasing = True
- 定义了两个布尔变量
increasing和decreasing,初始值都为True。这两个变量分别用于记录数组是否是单调递增和单调递减的。
遍历数组
for i in range(1, len(nums)):
- 使用
for循环从索引 1 开始遍历数组nums,直到最后一个元素。
检查单调性
if nums[i] > nums[i-1]:
decreasing = False
elif nums[i] < nums[i-1]:
increasing = False
-
在循环中,比较当前元素
nums[i]和前一个元素nums[i-1]:- 如果
nums[i] > nums[i-1],则说明当前元素比前一个元素大,数组不是单调递减的,因此将decreasing设置为False。 - 如果
nums[i] < nums[i-1],则说明当前元素比前一个元素小,数组不是单调递增的,因此将increasing设置为False。
- 如果
返回结果
return increasing or decreasing
- 最后,返回
increasing或decreasing中的一个。如果数组是单调递增或单调递减的,则至少有一个变量为True,函数返回True;否则,返回False。
主程序
if __name__ == '__main__':
print(solution(nums=[1, 2, 2, 3]) == True)
print(solution(nums=[6, 5, 4, 4]) == True)
print(solution(nums=[1, 3, 2, 4, 5]) == False)
- 这部分代码用于测试
solution函数。它调用solution函数并打印结果,验证函数的正确性。