每日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 # 循环结束之后,如果递减只出现了最多一次,则说明经过一次改变就可以完成任务,但是如果不止一次,说明任务失败

 

posted @ 2021-05-04 17:23  LLLLgR  阅读(39)  评论(0编辑  收藏  举报