Leetcode_Python 665 非递减数列_遍历数组

分析:题目让最多改变一个情况下,满足非递减数列。遍历数组,可能存在以下情况。

  • 有大于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