分析:题目让最多改变一个情况下,满足非递减数列。遍历数组,可能存在以下情况。
有大于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