题目简化为修改一个数将原本有可能是递减的数组变为递增数组。
如果nums[i-1]<nums[i],则将i-1的数字变为i的数字,因为如果改后面的,有可能会因此而影响后面的比较,使得i的数字大于i+1的数字,所以应尽量优先将nums[i-1]=nums[i]
如果nums[i-2]<nums[i],只修改nums[i - 1] = nums[i] 不能令数组成为递增,只能通过修改 nums[i] = nums[i - 1] 才行。
class Solution { public boolean checkPossibility(int[] nums) { int count=0; for(int i=1;i<nums.length;i++){ //首先判断前一个与当前值的大小 if(nums[i-1]>nums[i]){ if(i-2>=0){ //判断是否存在前两个 if(nums[i-2]>nums[i]){ //存在的情况下,看前两个与当前值的大小 nums[i]=nums[i-1]; count++; }else{ //存在的情况下,前两个大致模式为010,则只需要修改1为0 nums[i-1]=nums[i]; count++; } } //如果不存在前两个,说明应该是第0个和第1个数 else{ //只需要修改前一个,确保不影响后面的比较 nums[i-1]=nums[i]; count++; } } } if(count>1) return false; else return true; } }