LeetCode #665. Non-decreasing Array

题目

665. Non-decreasing Array


解题方法

设置一个rat记录是否已经用完了更改次数,遍历数组,遇到nums[i] > nums[i+1]的情况时,判断是否能更改,如果不行返回false;如果行,判断nums[i-1]和nums[i+1]的大小关系,如果nums[i+1]>=nums[i-1]或者i在第0位,则设置nums[i]=nums[i+1],否则nums[i+1]=nums[i],然后设置rat=0,并将i的位置回溯1~2位,具体回溯长度取决于i是否在数组第0位,遍历结束返回True。
时间复杂度:O(n)
空间复杂度:O(1)


代码

class Solution:
    def checkPossibility(self, nums: List[int]) -> bool:
        rat = 1
        i = 0
        while i < len(nums)-1:
            if nums[i] > nums[i+1]:
                if rat:
                    if not i or nums[i+1] >= nums[i-1]:
                        nums[i] = nums[i+1]
                    else:
                        nums[i+1] = nums[i]
                    rat = 0
                    if not i:
                        i -= 1
                    else:
                        i -= 2
                else:
                    return False
            i += 1
        return True
posted @ 2020-11-04 09:16  老鼠司令  阅读(51)  评论(0)    收藏  举报