给你一个长度为 n 的整数数组,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列。
我们是这样定义一个非递减数列的: 对于数组中所有的 i (0 <= i <= n-2),总满足 nums[i] <= nums[i + 1]。
示例 1:
输入: nums = [4,2,3]
输出: true
解释: 你可以通过把第一个4变成1来使得它成为一个非递减数列
贪心的思路在于让前面子数组的结尾元素尽量少,那么后面元素可以满足非递减的情况的可能性越大
代码
class Solution {public boolean checkPossibility(int[] nums) {int n=nums.length,cnt=0;if(n==1) return true;for(int i=0;i<n-1;i++){if(nums[i+1]<nums[i])//当出现递减时{if(++cnt>1) return false;//不满足的位置加一if(i>0&&nums[i+1]<nums[i-1])
//num[i-1] nums[i] nums[i+1]
//当出现递减时,有两种改变元素的方法,分别是 nums[i+1]=nums[i] 或者 nums[i]=nums[i-1]
//当nums[i+1]<nums[i-1],只能将元素变为 nums[i-1] nums[i] nums[i]
//当nums[i+1]>=nums[i-1],就将元素变为 nums[i-1] nums[i-1] nums[i+1]
//上面的两种序列根据 已知条件 nums[i-1]<=nums[i] 可以证明均满足非递减nums[i+1]=nums[i];}}return true;}
}