• 每日一题力扣665


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

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

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/non-decreasing-array
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    错解

    对不起我是智障

    class Solution:
        def checkPossibility(self, nums: List[int]) -> bool:
            N=len(nums)
            if N<=2:
                return True
            count=0
            for i in range(N):
                if i==0 and nums[i]>nums[i+1]:
                    count+=1
                    nums[i+1]=nums[i]
                elif nums[i]>nums[i+1] and nums[i]>nums[i-1]:
                    count+=1
                    nums[i+1]=nums[i]
                elif nums[i]>nums[i+1] and nums[i]<nums[i-1]:
                    count+=2 
                    nums[i]=nums[i-1]
                    nums[i+1]=nums[i-1]
            return count<=1

    正解

    大概意思就是多写几个例子出来

    如果i<i-1,确实要调整,但如果i还<i-2的话(前面的都拍好顺序了,i-1和i-2的顺序是对的),也就是说有i<i-2<i-1,如 3 5 2那么只能靠i自己做最大的老大了,单不知道后面的数如何,所以把2调整成5比较保险

    如果i<i-1,确实要调整,但如果i还>i-2的话,如3 5 4,此时把4调整成5或者把5调整成4都是比较好的选择,优先把前面的数调小,所以这里最好调整5为3

    有种情况就是没有i-2的时候,也就是i<2即代码中i==1的时候,这种情况就只能吧i调成i-1比较好

    class Solution:
        def checkPossibility(self, nums: List[int]) -> bool:
            N=len(nums)
            if N<=2:
                return True
            count=0
            for i in range(1,N):
                if nums[i]<nums[i-1]:#如果该数小于前一个数,需要调整,所以加一,每次遍历一个数,所以只加1
                    count+=1
                    if i==1 or nums[i]>nums[i-2]:
                        nums[i-1]=nums[i]
                    elif nums[i]<nums[i-2]:
                        nums[i]=nums[i-1]
            return count<=1
  • 相关阅读:
    作业07-Java GUI编程
    作业06-接口、内部类
    作业05-继承、多态、抽象类与接口
    作业14-数据库
    作业13-网络
    作业12-流与文件
    作业11-多线程
    作业10-异常
    作业09-集合与泛型
    作业08-集合
  • 原文地址:https://www.cnblogs.com/liuxiangyan/p/14454593.html
Copyright © 2020-2023  润新知