leetcode 非递减序列

2019-07-10  本文已影响0人  华小锐

题目要求

给定一个序列,改动其中的数字,能够构成非递减序列所更改次数少于2的函数返回真,否则返回假。

思路

首先考虑数组数量少于等于2的时候一定可以构成非递减序列
当大于等于3时需要,遇到当前的值大于后面的一个值说明这时候需要进行修改,修改有两种情况,将当前的值设置成前面的值,或者是设置成后面的值。
1.设置成前面的值
后面的值大于前面值的时候,设置当前的值为前面的值可以保证非递减序列。
2.设置成后面的值
后面的值小于前面值的时候,设置当前的值为后面的值可以保证非递减序列。

class Solution {
public:
    bool checkPossibility(vector<int>& nums) {
        int sum = 0;
        if(nums.size()<=2) return true;
        
        if(nums[0]>nums[1])
        {
            sum++;
            nums[0] = nums[1];
        }
        for(int i = 1;i<nums.size()-1;i++)
        {
            // 如果大了必然得改
            if(nums[i]>nums[i+1])
            {
                if(nums[i+1]>nums[i-1])
                {
                    nums[i] = nums[i-1];
                }
                if(nums[i+1]<nums[i-1])
                {
                    nums[i+1] = nums[i];
                }
                sum++;
            }
        }
        
        if(sum>1)
        {
            return false;
        }
        return true;
    }
};
上一篇 下一篇

猜你喜欢

热点阅读