Leetcode665. 非递减数列(C语言)
算法-贪心算法:算法与数据结构参考
题目:
给定一个长度为 n 的整数数组,你的任务是判断在最多改变 1 个元素的情况下,该数组能否变成一个非递减数列(包括‘=’)。例:
输入: [4,2,3]
输出: True
解释: 你可以通过把第一个4变成1来使得它成为一个非递减数列。
思路:
贪心。前中后同时比较,注意初始值另外比较。
不能前后两个比较,反例:[3,4,2,3]
代码:
bool checkPossibility(int* nums, int numsSize){
if(numsSize<2) return true;
int cont=0;
if (nums[0] > nums[1]) {
nums[0] = nums[1];
cont++;
}
for(int i=1;i<numsSize-1;i++){
int r=nums[i+1]; //右边赋值
if(nums[i]>r){ //出现第一个非递减
cont++;
if(cont>1) return false;
int l=nums[i-1]; //左边赋值
if(l>r) nums[i+1]=nums[i]; //nums[i]>l>r的情况
nums[i]=l; //无非递减,则后移
}
}
return true;
}