难度简单
给你一个长度为 n
的整数数组,请你判断在 最多 改变 1
个元素的情况下,该数组能否变成一个非递减数列。
我们是这样定义一个非递减数列的: 对于数组中所有的 i
(0 <= i <= n-2)
,总满足 nums[i] <= nums[i + 1]
。
思路:
第一次遍历,尝试弥补缺陷 (适当满足且仅调整一个数据) :若是前一个值过大,将当前值赋值给前一个值,否则将前一个值赋值给当前值。
第二次遍历,当前数值不满足非递减数列,返回 false
代码:
bool checkPossibility(vector<int>& nums) {
int len=nums.size();
for(int i=1;i<len;++i){
if(nums[i]<nums[i-1]) {
if(i+1<len && nums[i-1]>nums[i+1]) nums[i-1]=nums[i];
else nums[i]=nums[i-1];
break;
}
}
// 第二次循环,再有问题,不满足
for(int i=1;i<len;++i){
if(nums[i]<nums[i-1]) {
return false;
}
}
return true;
}