LeetCode:665. 非递减数列
偏思维,需要归纳总结现象
当我们遇到递减时, 如果当前是第二位元素 i = = 1 i == 1 i==1, 则将第一位变小, 即 n u m s [ i − 1 ] = = n u m s [ i ] nums[i - 1] == nums[i] nums[i−1]==nums[i]
当不是第二位元素的时候, 我们有两种方式修改, 将前一个变小,将当前的这个变大
什么时候变小,什么时候变大呢。
需要看当前 nums[i] 和 nums[i - 2] 的大小
如果 nums[i - 2] 比较小, 那么就将前一个变小, 即 nums[i - 1] = nums[i];
如果 nums[i] 比较小, 那么就将当前的这个变大, 即 nums[i] = nums[i - 1]
AC Code
class Solution {
public boolean checkPossibility(int[] nums) {
int len = nums.length, cnt = 0;
for(int i = 1; i < len; i++) {
if(nums[i] < nums[i - 1]) {
if (i == 1 || nums[i] >= nums[i - 2]) nums[i - 1] = nums[i];
else nums[i] = nums[i - 1];
cnt++;
}
if(cnt > 1) return false;
}
return true;
}
}