Leetcode 665 修改一个数成为非递减数组 (Easy)

题目简化为修改一个数将原本有可能是递减的数组变为递增数组。

如果nums[i-1]<nums[i],则将i-1的数字变为i的数字,因为如果改后面的,有可能会因此而影响后面的比较,使得i的数字大于i+1的数字,所以应尽量优先将nums[i-1]=nums[i]

如果nums[i-2]<nums[i],只修改nums[i - 1] = nums[i] 不能令数组成为递增,只能通过修改 nums[i] = nums[i - 1] 才行。

class Solution {
    public boolean checkPossibility(int[] nums) {
        int count=0;
        for(int i=1;i<nums.length;i++){
            //首先判断前一个与当前值的大小
            if(nums[i-1]>nums[i]){
                if(i-2>=0){
                    //判断是否存在前两个
                    if(nums[i-2]>nums[i]){
                        //存在的情况下,看前两个与当前值的大小
                        nums[i]=nums[i-1];
                        count++;
                    }else{
                        //存在的情况下,前两个大致模式为010,则只需要修改1为0
                        nums[i-1]=nums[i];
                        count++;
                    }
                }
                //如果不存在前两个,说明应该是第0个和第1个数
                else{
                    //只需要修改前一个,确保不影响后面的比较
                    nums[i-1]=nums[i];
                    count++;
                }
            }
        }
        if(count>1) return false;
        else return true;

    }
}
原文地址:https://www.cnblogs.com/sjh-dora/p/12884201.html