题目出处: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++,判断是否超过次数,没有就修改.