码迷,mamicode.com
首页 > 其他好文 > 详细

[LeetCode] 665. Non-decreasing Array

时间:2019-04-06 17:15:10      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:判断   des   efi   put   用例   ast   integer   pre   遇到   

Description

Given an array with n integers, your task is to check if it could become non-decreasing by modifying at most 1 element.

We define an array is non-decreasing if array[i] <= array[i + 1] holds for every i (1 <= i < n).

Example 1:

Input: [4,2,3]
Output: True
Explanation: You could modify the first 4 to 1 to get a non-decreasing array.

Example 2:

Input: [4,2,1]
Output: False
Explanation: You can't get a non-decreasing array by modify at most one element.

Note: The n belongs to [1, 10,000].


Analyse

给定一个大小为n的数组A,允许最多修改一个元素的值,判断能否变成一个非递减序列

从左到右遍历数组,当遇到比前一个数A[i-1]小的数A[i]的时候,由于可以修改一个元素的值,可以将前一个数A[i-1]变小,A[i-1] = A[i-2]

反映到代码里,直接判断当前数A[i]是否大于A[i-2]即可

有一种不满足以上关系的情况(1-2<0)

A[1] < A[0]

比如{4, 2, 3},这种情况就直接忽略4,判断剩下的元素是否非递减的

最终代码如下,这道题我提交了快10次,拿到了8个LeetCode的测试用例,最后看着Solution改自己的版本才AC了

Think more, write less

bool checkPossibility(vector<int>& nums)
{
    int last = -100000;
    bool state = false;
    for (int i = 0; i < nums.size(); i++)
    {
        if (nums[i] >= last)
        {
            last = nums[i];
        }
        else
        {
            if (state) return false;

            if (i==1 || nums[i] >= nums[i-2])
            {
                last = nums[i];
            }

            state = true;
        }
    }

    return true;
}

[LeetCode] 665. Non-decreasing Array

标签:判断   des   efi   put   用例   ast   integer   pre   遇到   

原文地址:https://www.cnblogs.com/arcsinw/p/10661968.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!