leetcode记录:难度简单:665. Non-decreasing Array(非递减数列)

题目出处:https://leetcode.com/problems/non-decreasing-array/

题目描述:

给定一个具有n个整数的数组,您的任务是检查它是否可以通过最多修改1个元素而变得非递减。

如果数组[i]<=array[i+1]为每个i(1<=i<n)保留,则定义数组为非递减数组。

Example 1:

Input: [4,2,3]
Output: True
Explanation: You could modify the first 4 to 1 to get a non-decreasing array.

 Example 2:

Input: [4,2,1]
Output: False
Explanation: You can't get a non-decreasing array by modify at most one element.

 意思就是,只让修改一个数组元素,来保证这个数组是递增数列,再机上特殊情况,就是所有元素相等成为非递减数列

代码:

 /**
     * @param {number[]} nums
     * @return {boolean}
     */
    var checkPossibility = function (nums) {
        //count来记录发生不满足递增的下标元素
        var count = 0;
        //因为从0开始就是往后比,数组最后一个元素就只能和空比,
        // 从1开始就是往前比,这个没有特殊情况。
        for (var i = 1; i < nums.length; i++) {
            //判断是否出现异常的下标元素
            if (nums[i - 1] > nums[i]) {
                //此时出现了异常的下标元素,nums[i-1]
                count++;
                //如果此时count的数量大于1,则判定不符合题目要求(要求:只修改一个)
                if (count > 1) return false;

                //进行修改,通过nums[i-2]与nums[i]的大小比较,来判断:
                //  nums[i-2]<nums[i],则减小nums[i-1]
                //  nums[i-2]>nums[i],则增大nums[i]
                //以满足数列非递减的要求。
                const left = i > 1 ? nums[i - 2] : -Infinity;
                if (left > nums[i]) {
                    nums[i] = nums[i - 1];
                } else {
                    nums[i - 1] = left;
                }
            }
        }

    };

 

思路:

对数组循环,出现异常,首先记录,count++,判断是否超过次数,没有就修改.

猜你喜欢

转载自blog.csdn.net/weixin_42273637/article/details/87296644