zoukankan      html  css  js  c++  java
  • 每日leetcode-数组-665. 非递减数列

    分类:数组-数组的改变、移动

    题目描述:

    给你一个长度为 n 的整数数组,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列。

    我们是这样定义一个非递减数列的: 对于数组中任意的 i (0 <= i <= n-2),总满足 nums[i] <= nums[i + 1]。

    解题思路:

    4 2 5

    1 4 2 5

    3 4 2 5

    三个例子,要注意考虑前两个数

    之前的错误思路:找出最大的数,直接改为最小的数-1,再遍历判断......

    class Solution:
        def checkPossibility(self, nums: List[int]) -> bool:
            count = 0 # 用来计算数组中出现递减的次数
            N = len(nums)
            for i in range(1,N):
                if nums[i] < nums[i-1]: #当出现递减的时候做如下判断:
                    count +=1 # 把递减次数+1
                    if i==1 or nums[i]>=nums[i-2]: #当递减出现在第一位或者不在第一位但是第i位的元素比第i-2位大的时候,那么更改递减前面的那个数为后一个数
                        nums[i-1] = nums[i]
                    else: #否则,改后面的那个数为前一个数,是为了避免出现改了前面的数但是后面的数比前两位小的情况
                        nums[i] = nums[i-1]
            return count <= 1 # 循环结束之后,如果递减只出现了最多一次,则说明经过一次改变就可以完成任务,但是如果不止一次,说明任务失败
  • 相关阅读:
    VM VirtualBox安装Centos6.5
    桥接
    程序员工作心法
    策略模式-鸭子怎么飞-实例
    策略模式-用什么方式去上班呢 实例
    观察者模式-订报纸,语音呼叫系统实例
    门面(Facade)模式--医院,保安系统实例
    Promise实例的resolve方法
    Promise实例的any方法
    Promise实例的race方法
  • 原文地址:https://www.cnblogs.com/LLLLgR/p/14729894.html
Copyright © 2011-2022 走看看