数组-Leetcode-665

91 阅读1分钟

0️⃣python数据结构与算法学习路线
学习内容:

  • 基本算法:枚举、排序、搜索、递归、分治、优先搜索、贪心、双指针、动态规划等…
  • 数据结构:字符串(string)、列表(list)、元组(tuple)、字典(dictionary)、集合(set)、数组、队列、栈、树、图、堆等…

题目:

给你一个长度为 n 的整数数组,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列。
我们是这样定义一个非递减数列的: 对于数组中任意的 i (0 <= i <= n-2),总满足 nums[i] <= nums[i + 1]。

输入输出:

输入: nums = [4,2,3]
输出: true
解释: 你可以通过把第一个4变成1来使得它成为一个非递减数列。

解题思路:

如果第 i 个数字比 i-1 数字小(非递减)

  • count + 1
  • 判断i是否是否 >= i - 2 或 i =1:nums[i - 1] = nums[i]
  • 否则 nums[i] = nums[i - 1]

返回count <= 1

算法实现:

class Solution(object):
    def checkPossibility(self, nums):
        N = len(nums)
        count = 0
        for i in range(1, N):
            if nums[i] < nums[i - 1]:
                count += 1
                if i == 1 or nums[i] >= nums[i - 2]:
                    nums[i - 1] = nums[i]
                else:
                    nums[i] = nums[i - 1]
        return count <= 1

出现问题:

  1. 每次判断完之后直接变换为需要变的,就可以不用考虑错误数字给后面其他数字的判断造成影响