LeetCode 665. 非递减数列

class Solution {
public:
    bool checkPossibility(vector<int>& nums) {
        int n = nums.size();
        for(int i=0;i<n-1;i++){
            int x = nums[i],y = nums[i+1];
            if(x>y){
                //后面向前面看齐
                nums[i]=y;
                if(is_sorted(nums.begin(),nums.end())){
                    return true;
                }
                //前面向后面看齐
                nums[i] = x;
                nums[i+1]=x;
                return is_sorted(nums.begin(),nums.end());
            }
        }
        return true;
    }
};

简化版

class Solution {
public:
    bool checkPossibility(vector<int>& nums) {
        int n = nums.size();
        int cnt = 0;
        for (int i = 0; i < n - 1; i++) {
            int x = nums[i], y = nums[i + 1];
            if (x > y) {
                cnt++;
                if (cnt > 1) return false;
                //如果下面成立那么就应该y看向
                if (i > 0 && nums[i - 1] > y) {
                    nums[i + 1] = x;
                }
            }
        }
        return true;
    }
};
posted @ 2022-11-12 23:44  破忒头头  阅读(28)  评论(0)    收藏  举报