LeetCode---665.Non-Decreasing Array 非减数组

LeetCode—665.Non-Decreasing Array 非减数组

题目

给出一个有n个数的数组,检查是否可以最多调整一个数的大小,使得数组是非单调递减的,如果可以,返回true,否则false

例如,输入[4, 2, 3],返回true,输入[4, 2, 1]返回false

思路

首先想到的肯定是需要遍历数组,找到打乱顺序的那个数,或者说拿到他的下标p,同时题目要求最多调整一个数,所以p的个数如果大于1是不可以的。当然如果p的个数为0,那就不用调整直接返回true
然后我们要讨论p的个数为1的情况。容易想到的是,如果p刚好位于数组第一个位置或者最后一个位置,我们只需调整到和第二个位置或者倒数第二个位置数字相同就可以,返回true;那么如果p位于不包含两端的中间位置呢?这时候我们应该去看p两侧的两个数字,如果Array[p-1]<=Array[p+1],只需将Array[p]调整到两者之间或者相等

代码
class Solution(object):
    def checkPossibility(self, nums):
        """
        :type nums: List[int]
        :rtype: bool
        """
        p = None 
        for i in range(len(nums)-1):
            if nums[i]>nums[i+1]:
                if p is not None:
                    return False
                p = i

        return(p is None or p == 0 or p == len(nums)-2 
        or nums[p-1]<=nums[p+1] or nums[p]<=nums[p+2]) 
        //示例答案里nums[p]<=nums[p+2]我想好像没有必要,但也可能有情况没想到,先放在这里
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值