Leetcode 665.非递减数列

非递减数列

给定一个长度为 n 的整数数组,你的任务是判断在最多改变 1 个元素的情况下,该数组能否变成一个非递减数列。

我们是这样定义一个非递减数列的: 对于数组中所有的 i (1 <= i < n),满足 array[i] <= array[i + 1]。

示例 1:

输入: [4,2,3]

输出: True

解释: 你可以通过把第一个4变成1来使得它成为一个非递减数列。

示例 2:

输入: [4,2,1]

输出: False

解释: 你不能在只改变一个元素的情况下将其变为非递减数列。

说明:  n 的范围为 [1, 10,000]。

思路

保证前面的数列是有序的

保证前面的数列尽可能的小

定一个计数器,记录为了保证有序修改的次数

最后判断修改的次数

 1 public class Solution {
 2     public boolean checkPossibility(int[] nums) {
 3         int count=0;
 4         for(int i=1;i<nums.length&&count<2;i++){
 5             if(nums[i]>=nums[i-1]) continue;
 6             if(i-2>=0&&nums[i]<nums[i-2]){
 7                 nums[i]=nums[i-1];
 8             }else{
 9                 nums[i-1]=nums[i];
10             }
11             count++;
12         }
13         return count<=1;
14     }
15 }
原文地址:https://www.cnblogs.com/kexinxin/p/10394931.html