LeetCode #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

浙公网安备 33010602011771号