LeetCode 665.非递减数列

简介: LeetCode 665.非递减数列

665.非递减数列


思路

首先要明确最多只能修改一个元素。当元素呈现递减趋势时需要修改,而当递减数组大小超过2时,例如 [ 3 , 2 , 1 ] ,至少要修改2次不符合题意。但这样做还不够

本题唯一的易错点就在这,


如果将nums[i]缩小,可能会导致其无法融入前面已经遍历过的非递减子数列;

如果将nums[i + 1]放大,可能会导致其后续的继续出现递减;


所以要每次连续看3个元素,所谓瞻前顾后:


需要尽可能不放大nums[i + 1],这样会让后续非递减更困难;

如果缩小nums[i],但不破坏前面的子序列的非递减性;


代码实现

class Solution
{
public:
    bool checkPossibility(vector<int> &nums)
    {
        if (nums.size() == 1)
            return true;
        bool flag = nums[0] <= nums[1] ? true : false; // 标识是否还能修改
        // 遍历时,每次需要看连续的三个元素
        for (int i = 1; i < nums.size() - 1; i++)
        {
            if (nums[i] > nums[i + 1]) // 出现递减
            {
                if (flag) // 如果还有修改机会,进行修改
                {
                    if (nums[i + 1] >= nums[i - 1]) // 修改方案1
                        nums[i] = nums[i + 1];
                    else // 修改方案2
                        nums[i + 1] = nums[i];
                    flag = false; // 用掉唯一的修改机会
                }
                else // 没有修改机会,直接结束
                    return false;
            }
        }
        return true;
    }
};
目录
相关文章
|
4月前
leetcode-38:外观数列
leetcode-38:外观数列
22 0
|
11月前
|
算法 安全 Swift
LeetCode - #38 外观数列
不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。
LeetCode - #38 外观数列
|
存储 Python
LeetCode 38. 外观数列
给定一个正整数 n ,输出外观数列的第 n 项。
77 0
LeetCode:665. 非递减数列
LeetCode:665. 非递减数列
74 0
|
算法
LeetCode 38外观数列&39组合总和
给定一个正整数 n(1 ≤ n ≤ 30),输出外观数列的第 n 项。
81 0
LeetCode 38外观数列&39组合总和
|
存储 算法 C语言
想要去欺负Leetcode的这些年——第二次,看看咱们是怎么把数组玩转,把数列理解透彻的~
想要去欺负Leetcode的这些年——第二次,看看咱们是怎么把数组玩转,把数列理解透彻的~
122 0
想要去欺负Leetcode的这些年——第二次,看看咱们是怎么把数组玩转,把数列理解透彻的~
LeetCode-38. 外观数列(Goland实现)
LeetCode-38. 外观数列(Goland实现)
89 0
☆打卡算法☆LeetCode 38、外观数列 算法解析
“给定一个正整数n,输出外观数列的第n项。”
|
2月前
|
机器学习/深度学习 算法
力扣刷题日常(一)
力扣刷题日常(一)
20 2

热门文章

最新文章