题目描述:
标签: 数组
给你一个长度为 n 的整数数组,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列。
我们是这样定义一个非递减数列的: 对于数组中任意的 i (0 <= i <= n-2),总满足 nums[i] <= nums[i + 1]。
代码:
思路分析:
1、要学会总结在什么情况下会要进行改变元素的操作:
①当nums[i] >= nums[i-1]时,满足非递减的条件,所以不需要改变元素
②否则需要改变元素(改变操作计数)count++,两种情况:
(1) 如果前面只有一个元素,则是nums[i] < nums[i-1] 的情况,使nums[i-1] = nums[i],减小前一个元素的大小;
(2)如果前面超过两个元素,则先比较nums[i] < nums[i-2]的情况,因为前面已经保证nums[i-1]肯定大于等于nums[i-2],所以只需要修改nums[i]=nums[i-1]即可来保证元素的非递减性质。
2、用贪心思想的点在于修改元素直接让它等于该元素,方便之后继续操作。
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-2] > nums[i]){
nums[i] = nums[i-1];
}else{
nums[i-1] = nums[i];
}
}
return count <= 1;
}
}