LeetCode-665 Non-decreasing Array

题目描述 : 给定一个具有N个整型元素的数组,检查该数组是否能够通过最多改变一个元素的值,从而使得其本身变为单调非减数组,我们定义单调非减是指对于数组中的每一个有效下标i,都有 a[i] <= a[i+1]。
算法描述 :

对于给定的数组 a1,a2,a3,a4,a5,…

假设a4 < a3. 为了实现数组的单调非减,我们必须改变a4和a3其中的一个值,与此同时,为了后续计算的需要,我们应当尽可能使a4相对较小。此时,究竟是改变a3,还是a4取决于a2值的大小。我们假设a4 < a3, 那么a3 >= a2。 因此,如果a4 < a2, 那么我们将改变a4, 最好的选择就是令 a4 = a3; 否则的话,我们令a3 = a4, 但是这种情况我们并不需要考虑。

代码实现

class Solution {
    public boolean checkPossibility(int[] nums) {
        if (nums == null || nums.length <= 1) return true;
        boolean found = false;
        for (int i = 1; i< nums.length; i++){
            if(nums[i]<nums[i-1]){
                if(found) return false;
                else {
                    if(i-2>=0 && nums[i]<nums[i-2]) nums[i] = nums[i-1];
                    found = true;
                }
            }
        }
        return true;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值