- 题目描述
给你一个长度为 n 的整数数组,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一
个非递减数列。
我们是这样定义一个非递减数列的: 对于数组中所有的 i (0 <= i <= n-2),总满足 nums[i] <=
nums[i + 1]。
- 题解
本题求解时的问题在于,假设nums[i]<nums[i-1]时,改变的应该是nums[i]还是nums[i-1],
应该尽量使前面的数小一些,这样更能满足题目的条件,所以使nums[i-1]变小是最佳的选
择,但是同时必须要满足其与nums[i-2]之间的大小关系,所以可以进行一下判断。
- 代码
class Solution {
public:
bool checkPossibility(vector<int>& nums) {
int n=nums.size(),cnt=0;
for (int i=1;i<n;i++){
if (nums[i]<nums[i-1]){
if (i-2>=0&&nums[i-2]>nums[i]) nums[i]=nums[i-1];
else nums[i-1]=nums[i];
cnt++;
}
}
return cnt<=1;
}
};