题目描述:
难度虽然是简单,但是这道题通过率比较低。要注意一些特别的情况!
在例子(1),我们发现2比4小,于是我们修改前面的值,让其等于2,这样就是一个非递减的数列。
举一个例子(2):1,2,3,5,4,5,6,7...
在这个例子里,和例子1差不多,我们把4改成5就好了。
再举一个例子(3):
-1,2,4,5,3,6,7...
我们发现,我们只需要让3改成5就可以让这个数列变成一个非递减。
比较上面例子:当我们发现有一个数比前一个数小的时候,我们既可以改变当前数字例子(3),也可以改变当前数字的前一个数字(例子1和2)。
那么到底要改哪个数字的规律呢,我们发现,当我们找到一个出问题的数字(让数列不处于非递减数列)时,还要比较一下这个数字和前第二个数字的大小。如果大于等于,则只需改当前数字,否则就改当前数字的前一个数字。
代码如下:
class Solution {
public boolean checkPossibility(int[] nums) {
// 4 2 3 改4 --2
// 1 2 4 3 5 改4 --- 3
// -1 3 3 4 2 5 改2----4
if (nums.length<=1||nums==null){
return true;
}
int res=0;
for(int i=1;i<nums.length&&res<2;i++){
if(nums[i-1]<=nums[i]){
continue;
}
//不是非递减
res++;
if(i-2>=0){
if(nums[i]<nums[i-2]){
nums[i]=nums[i-1];
}
else {
nums[i-1]=nums[i];
}
}
}
return res<=1;
}
}