每日leetcode-数组-665. 非递减数列
分类:数组-数组的改变、移动
题目描述:
给你一个长度为 n 的整数数组,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列。
我们是这样定义一个非递减数列的: 对于数组中任意的 i (0 <= i <= n-2),总满足 nums[i] <= nums[i + 1]。
解题思路:
4 2 5
1 4 2 5
3 4 2 5
三个例子,要注意考虑前两个数
之前的错误思路:找出最大的数,直接改为最小的数-1,再遍历判断......
class Solution: def checkPossibility(self, nums: List[int]) -> bool: count = 0 # 用来计算数组中出现递减的次数 N = len(nums) for i in range(1,N): if nums[i] < nums[i-1]: #当出现递减的时候做如下判断: count +=1 # 把递减次数+1 if i==1 or nums[i]>=nums[i-2]: #当递减出现在第一位或者不在第一位但是第i位的元素比第i-2位大的时候,那么更改递减前面的那个数为后一个数 nums[i-1] = nums[i] else: #否则,改后面的那个数为前一个数,是为了避免出现改了前面的数但是后面的数比前两位小的情况 nums[i] = nums[i-1] return count <= 1 # 循环结束之后,如果递减只出现了最多一次,则说明经过一次改变就可以完成任务,但是如果不止一次,说明任务失败