leetcode 非递减序列

题目要求

给定一个序列,改动其中的数字,能够构成非递减序列所更改次数少于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;
    }
};
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,481评论 0 5
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,451评论 0 9
  • 1、窗体 1、常用属性 (1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体。 ...
    Moment__格调阅读 4,600评论 0 11
  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 3,548评论 1 11
  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 13,956评论 0 15