每日一题 21.02.07 LeetCode 665. 非递减数列 java题解

题目

https://leetcode-cn.com/problems/non-decreasing-array/

每日一题 21.02.07 LeetCode 665. 非递减数列 java题解_第1张图片

分析

采取贪心的策略,在遍历时,每次需要看连续的三个元素,也就是瞻前顾后,遵循以下两个原则:
需要尽可能不放大nums[i + 1],这样会让后续非递减更困难;
如果缩小nums[i],但不破坏前面的子序列的非递减性;

代码

class Solution {
     
    public boolean checkPossibility(int[] nums) {
     
        int len=nums.length;
        int count=0;
        for(int i=0;i<len-1;i++){
     
            int x=nums[i];
            int y=nums[i+1];
            if(x>y){
     
                count++;
                if(count>1)
                    return false;
                if(i>0&&y<nums[i-1]){
     
                    nums[i+1]=nums[i];
                }
            }
        }  
        return count<=1;
    }
}

复杂度

时间O(N)
空间O(1)

你可能感兴趣的:(LeetCode,leetcode,java,算法)