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 # 循环结束之后,如果递减只出现了最多一次,则说明经过一次改变就可以完成任务,但是如果不止一次,说明任务失败
  • 相关阅读:
    初级Linux学习指南
    2016/09/29 SQL中的join
    2016/09/27 Hadoop Yarn
    2016/06/27 HDFS概述
    2016/09/26 电能和电功率
    【转】2016/09/22 MapReduce初级案例
    2016/09/22 mapreduce
    2016/09/21 java关键字static
    2016/09/21 Java关键字final
    2016/09/21 java split用法
  • 原文地址:https://www.cnblogs.com/LLLLgR/p/14729894.html
Copyright © 2011-2022 走看看