分析:题目让最多改变一个情况下,满足非递减数列。遍历数组,可能存在以下情况。
- 有大于1个的
nums[i] > nums[i + 1]
情况,就不可能使得它成为一个非递减数列,直接返回Flase。例[4,2,1]。 - 如果都是
num[i] <= nums[i+1]
这种情况,直接返回True。例如[1,2,3],[1,2,2,3]。 - 只存在一个
nums[i] > nums[i + 1]
- 如果不在第一个位置出现
nums[i] > nums[i + 1]
,满足num[i-1]>num[i+1]
且n[i]>n[i+2]
,不可能使他成为非递减数列,直接返回Flase。例如[2,4,1,2]。- 其他情况均可,例如[2,1,3],[0,3,1,3]。
class Solution(object):
def checkPossibility(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
nums.append(10**5)
count = 0
place = 0
flag = True
for i in range(len(nums)-1):
if nums[i] > nums[i+1]:
count += 1
if count == 1 and flag:
place = i
flag = False
if count > 1:
return False
elif count == 0:
return True
elif count == 1:
if place == 0:
return True
elif nums[place-1] > nums[place+1] and nums[place]>nums[place+2]:
return False
else:
return True