题目描述
题目分析
- 当这个数组删去
n
个数后,呈现非递减的趋势,即每一个值都会比前一个值更大或相等
解法分析
- 循环判断当前值是否比前一个值更大或相等,否则就删去这个值,累计删除的次数,如果大于
n
就返回false
- 这里的删去值
不是真正的删去
,如果真正删去还要重新排一次数组,可以用值来覆盖 - 优先考虑令
nums[i - 1] = nums[i]
,因为如果修改 nums[i] = nums[i - 1]
的话,那么 nums[i]
这个数会变大,就有可能比 nums[i + 1]
大,从而影响了后续操作 - 还有一个比较特别的情况就是
nums[i] < nums[i - 2]
,例如:[3,4,2,3]
,这时候修改 nums[i - 1] = nums[i]
不能使数组成为非递减数组,只能修改 nums[i] = nums[i - 1]
。 - 即:如果输入
[4,2,3]
,则输出就是[2,2,3]
;如果输入是[3,4,5,2,3]
,那输出就是[3,4,5,5,5]
。
代码
class Solution {
public boolean checkPossibility(int[] nums) {
int count = 0;
for(int i = 1; i<nums.length && count<2; i++){
if(nums[i] >= nums[i-1]){
continue;
}
count++;
if(i-2>=0 && nums[i] < nums[i-2]){
nums[i] = nums[i-1];
} else {
nums[i-1] = nums[i];
}
}
return count<=1;
}
}