非递减数列
描述:
给你一个长度为 n 的整数数组,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列。
我们是这样定义一个非递减数列的: 对于数组中所有的 i (0 <= i <= n-2),总满足 nums[i] <= nums[i + 1]
思路
- 当数组长度小于3时,一定可以使改变一个元素让数组变成一个非递减数列
- 当长度大于3时,每当出现前一个元素大于后一个元素,就count++,如果count大于1返回false
- 若y的前元素x不存在时,使y=z即可
- 若存在,则要判断x与z的大小
- x<z,则y=z
- x>z,则z=y
- x=z,则y=z
- 因为数组只会扫描一遍,所以考虑x>z的情况即可
public boolean checkPossibility(int[] nums){
int len = nums.length;
if(len < 3) return true;
int count = 0;
for(int i = 0; i < len-1;i++){
if(nums[i] > nums[i+1]){
count++;
if(count > 1) return false;
if(i > 0 && nums[i-1] > nums[i+1]){
nums[i+1] = nums[i];
}
}
}
return true;
}