Leetcode665. 非递减数列

LeetCode 665. 非递减数列(python) 题目链接 题目描述: 给定一个长度为 n 的整数数组,你的任务是判断在最多改变 1 个元素的情况下,该数组能否变成一个非递减数列。 我们是这样定义一个非递减数列的: 对于数组中所有的 i (1 <= i < n),满足 array[i] <= array[i + 1]。 示例 1: 输入: [4,2,3] 输出: True 解释: 你可以通过把第一个4变成1来使得它成为一个非递减... 阅读详情

Every day a Leetcode

题目来源:665. 非递减数列

解法1:贪心

本题是要维持一个非递减的数列,所以遇到递减的情况时(nums[i] > nums[i + 1]),要么将前面的元素缩小,要么将后面的元素放大。

但是本题唯一的易错点就在这:

  • 如果将 nums[i] 缩小,可能会导致其无法融入前面已经遍历过的非递减子数列;
  • 如果将 nums[i + 1] 放大,可能会导致其后续的继续出现递减;

所以要采取贪心的策略,在遍历时,每次需要看连续的三个元素,也就是瞻前顾后,遵循以下两个原则:

  • 需要尽可能不放大 nums[i + 1],这样会让后续非递减更困难;
  • 如果缩小 nums[i],但不破坏前面的子序列的非递减性;

算法步骤:

遍历数组,如果遇到递减:

  • 还能修改:
    修改方案1:将 nums[i] 缩小至 nums[i + 1];
    修改方案2:将 nums[i + 1] 放大至 nums[i];
  • 不能修改了:直接返回false;

代码:

/*
 * @lc app=leetcode.cn id=665 lang=cpp
 *
 * [665] 非递减数列
 */

// @lc code=start
class Solution
{
public:
    bool checkPossibility(vector<int> &nums)
    {
        if (nums.size() <= 2)
            return true;
        int n = nums.size();
        bool flag = nums[0] <= nums[1] ? true : false; // 标识是否还能修改
        // 遍历时,每次需要看连续的三个元素
        for (int i = 1; i < n - 1; i++)
        {
            if (nums[i] > nums[i + 1]) // 出现递减
            {
                if (flag) // 如果还有修改机会,进行修改
                {
                    if (nums[i + 1] >= nums[i - 1])
                    { // 修改方案1:将nums[i]缩小至nums[i + 1]
                        nums[i] = nums[i + 1];
                    }
                    else
                    { // 修改方案2:将nums[i + 1]放大至nums[i]
                        nums[i + 1] = nums[i];
                    }
                    flag = false; // 用掉唯一的修改机会
                }
                else // 没有修改机会,直接结束
                    return false;
            }
        }
        return true;
    }
};
// @lc code=end

结果:

在这里插入图片描述

复杂度分析:

时间复杂度:O(n),其中 n 是数组 nums 的长度。

空间复杂度:O(1)。

解法2:数组

在这里插入图片描述

代码:

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;
    }
};

结果:

在这里插入图片描述

复杂度分析:

时间复杂度:O(n),其中 n 是数组 nums 的长度。

空间复杂度:O(1)。

跟着团子学SAP CO:基于成本的完工百分比结算:Cost-based POC(以项目为例) 本文以英国及北美会计准则下的基于成本的POC的销售型项目结算对PS模块中的完工百分比进行介绍 阅读详情

相关推荐

Python调用Google Trends官方数据接口实战指南

Google Trends作为全球最权威的搜索热度分析工具,其数据本质是公开、结构化、可编程访问的时序指标,而非需爬取的网页内容。其底层基于标准HTTP协议与JSON API交互,核心原理在于复现用户浏览器行为——通过/explore接口获取token,再凭token请求/widgetdata/multiline等端点获取归一化(0-100)时间序列数据。该技术路径规避了Selenium渲染依赖与非官方库的脆弱性,具备高稳定性、易调试、可监控等工程优势,广泛应用于竞品监测、内容选题验证、地域营销策略制定等业

weixin_29789925的博客 422

Leetcode(665)——非递减数列

Leetcode(665)——非递减数列

KCDCY的博客 524

文献阅读笔记:量子微波测量技术综述

量子微波测量技术研究进展:量子微波测量技术利用里德堡原子与微波电场的相干相互作用,突破了传统测量方法的物理限制。该技术基于电磁诱导透明效应和里德堡原子能级跃迁原理,通过激光激发原子并监测光谱变化来测量微波电场强度。相比传统方法,量子微波测量具有超高灵敏度(理论极限可达nV/cm)、宽动态范围(超过100dB)、小型化等显著优势,且测量结果可直接溯源至普朗克常数。典型实验系统包括光源、原子气室和探测器,采用光谱法、干涉法等多种测量方法。近年来,该技术在基础研究和应用方面取得重要进展,展现出在通信、雷达、计量等

Grow into a more wonderful you 991

LeetCode-665. 非递减数列

最后,在每次遇到递减情况并进行调整后,需要记录修改的次数。如果修改次数超过 1 次,说明无法在最多改变 1 个元素的情况下使数组变成非递减数列,直接返回。刚开始写这题时,我还在嘲笑这道题配不上中等的难度,直到我第一次写完提交之后才发现原来自己是个小丑,我的第一个代码主要存在这样一个逻辑错误,当。,说明出现了递减的情况,此时需要对元素进行调整,同时记录调整的次数。,这种做法没有考虑到修改元素后可能会破坏前面已经满足的非递减条件。个元素的情况下,该数组能否变成一个非递减数列。,按照你的代码逻辑,会将。

m0_75107602的博客 534

基于Python的闲鱼商品价格评估模型:爬虫+价格预测全实现

本文介绍了一个完整的全球气候数据抓取与分析流程,采用轻量化的技术栈(requests+pandas+matplotlib+folium),实现以下核心功能: 全球城市定向抓取:支持自定义城市列表,自动获取经纬度并抓取多源气候数据 双数据源互补:结合OpenWeatherMap API(实时数据)和Climate-Data.org(历史数据) 全维度覆盖:采集气温、降水、湿度等核心指标,并进行自动化清洗转换 丰富可视化:生成热力图、趋势图和统计图表,支持地理定位展示 灵活扩展:模块化设计便于新增城市或扩展数据

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 3052

数字IC设计避坑指南:为什么477条net的DRV问题无法修复?解析don‘t touch hierarchy的影响

本文深入解析了数字IC后端实现中,因“don't touch hierarchy”约束导致大量DRV违规(如477条net)无法自动修复的根本原因。文章以Cadence Innovus工具为例,详细阐述了DRV修复机制与设计保护约束的冲突原理,并提供了从日志定位、风险评估到分级解除约束的完整实战策略,帮助工程师有效解决此类设计收敛难题。

hope8的博客 290

Leetcode——665. 非递减数列

概述 题目链接 对于一个序列,要求最多改变1个元素,使得序列满足非递减排列 分析 题目要求序列满足非递减排列,当出现num[i]>=num[i+1]num[i]>=num[i+1]num[i]>=num[i+1]​时,一定要改变一个元素; 但是改变的元素的值应该尽可能使得不符合非递减的情况出现的概率要低 想到这里,考虑贪心策略 思路 当出现num[i]>=num[i+1]num[i]>=num[i+1]num[i]>=num[i+1],有两种处理方

Syy 504

[Dify实战]插件编写- 如何让插件直接输出文件对象(支持 TXT、Excel 等)

本文介绍了在Dify插件中实现文件对象返回的方法。通过create_blob_message()函数,开发者可以输出txt、Excel等格式文件,让用户直接下载而非复制文本。文章详细讲解了二进制文件生成的原理,提供了文本翻译和Excel报表生成的代码示例,并列出常见MIME类型对照表。这种技术能显著提升插件实用性,特别适用于翻译、报表生成等需要文件输出的场景,使交互体验从"复制粘贴"升级为"一键下载"。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 1249

665. 非递减数列

非递减数组

Crush_66的博客 380

FT2004(D2000)开发实战之网口stmmac报错调试(Failed to reset the dma)

网口stmmac报错调试(Failed to reset the dma)

嵌入式Linux 3587

Android 16强制横竖屏设置

但开发者端的响应却相对滞后,特别是中小型开发团队受限于大屏设备市场渗透率(截至2023年Q2,Android平板全球激活量约1.2亿台,不足手机设备5%)及开发成本考量,适配优先级普遍偏低。这种适配滞后已形成恶性循环——开发者因设备基数不足降低适配意愿,而用户体验缺陷又反向抑制大屏设备的市场接受度。要破解这一困局,既需要Google持续优化Jetpack Compose等现代化UI工具链,更需要建立开发者激励体系,通过应用商店流量倾斜、开发补贴等经济手段提升适配投入产出比。再不肯好好适配大屏设备?

xiangzhihong8的专栏 981

LeetCode665:非递减序列(python)

题目: 一个长度为 n 的整数数组,在最多改变1个元素的情况下,该数组能否变成一个非递减数列: 对于数组中任意的 i (0 <= i <= n-2),总满足 nums[i] <= nums[i + 1]。 思路: 非递减数列,也就是后面的数要大于等于前面,有一个则计数加一 所以:count=0,天然是非递减数列,返回ture count>1,返回False 对于count=0的情况,要分类讨论(也主要卡在这里开始写的时候) 情况一:[5,4,6,7]第一个数大于第二个,

weixin_42491368的博客 1023

OpenClaw人人养虾:接入Synology Chat

Synology Chat 是群晖 NAS(Network Attached Storage,网络附属存储)内置的即时通讯应用。

王国平的博客 781

力扣 leetcode 665. 非递减数列 (python)

Topic 给你一个长度为 n 的整数数组, 请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列。 我们是这样定义一个非递减数列的: 对于数组中所有的 i (0 <= i <= n-2),总满足 nums[i] <= nums[i + 1]。 Example_1 输入: nums = [4,2,3] 输出: true 解释: 你可以通过把第一个4变成1来使得它成为一个非递减数列。 Example_2 输入: nums = [4,2,1] 输出: false

weixin_50791900的博客 505

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

力扣 LeetCode 665. 非递减数列

遍历数组,先去查找是否存在 nums[i] > nums[i + 1],如果有的话记录下来+1,在此基础上还要进行二次判断(比如3 4 2 3,如果只记录nums[i] > nums[i + 1]的个数的话只有一个,但是事实上这个数组不满足改变一个数字就变成非递减数组),二次判断的条件是,这四个数字中,第一个数字要小于第三个数字,第二个数字要小于第四个数字,即nums[i-1]<nums[i+1]并且nums[i]<nums[i+2](要排除i=0和i=nums.size()-2的.

weixin_43304992的博客 243

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Leetcode665. 非递减数列(C语言)

Leetcode665. 非递减数列(C语言) 算法-贪心算法:算法与数据结构参考 题目: 给定一个长度为 n 的整数数组,你的任务是判断在最多改变 1 个元素的情况下,该数组能否变成一个非递减数列(包括‘=’)。例: 输入: [4,2,3] 输出: True 解释: 你可以通过把第一个4变成1来使得它成为一个非递减数列。 思路: 贪心。前中后同时比较,注意初始值另外比较。 不能前后两个比较,反例...

jeanlu的博客 602

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

力扣leetcode之Java刷题665非递减数列

leetcode之Java刷题

小李子Lee 194

Leetcode 665. 非递减数列 C++

Leetcode 665. 非递减数列 题目 给你一个长度为 n 的整数数组,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列。 我们是这样定义一个非递减数列的: 对于数组中所有的 i (0 <= i <= n-2),总满足 nums[i] <= nums[i + 1]。 测试样例 示例 1: 输入: nums = [4,2,3] 输出: true 解释: 你可以通过把第一个4变成1来使得它成为一个非递减数列。 示例 2: 输入: nums = [4,2,1] 输

weixin_43750513的博客 253

Leetcode 665 非递减数列

Leetcode 665 非递减数列 问题重述 给你一个长度为n的整数数组,请你判断在最多改变1个元素的情况下,该数组能否变成一个非递减数列。 我们是这样定义一个非递减数列的:对于数组中所有的 i (0 <= i <= n-2),总满足 nums[i] <= nums[i + 1]。(每两个数都是非递减的) 示例 1: 输入: nums = [4,2,3] 输出: true 解释: 你可以通过把第一个4变成1来使得它成为一个非递减数列。 示例 2: 输入: nums = [4,2,1]

UPC YR的博客 188

Leetcode 665.非递减数列

Leetcode 665.非递减数列 非递减数列 给你一个长度为 n 的整数数组,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列。 我们是这样定义一个非递减数列的: 对于数组中所有的 i (0 <= i <= n-2),总满足 nums[i] <= nums[i + 1]。 示例 1: 输入: nums = [4,2,3] 输出: true 解释: 你可以通过把第一个4变成1来使得它成为一个非递减数列。 示例 2: 输入: nums = [4,2,1] 输出:

EIUC_Thread的博客 134

leetcode 665. 非递减数列

【题目】665. 非递减数列(待研究) 给你一个长度为 n 的整数数组,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列。 我们是这样定义一个非递减数列的: 对于数组中所有的 i (1 <= i < n),总满足 array[i] <= array[i + 1]。 示例 1: 输入: nums = [4,2,3] 输出: true 解释: 你可以通过把第一...

Sophia_fez的博客 486

Leetcode.665 非递减数列

Leetcode 数组

感觉画质不如...原神的博客 186

20190509-Leetcode-665. 非递减数列

Leetcode-665. 非递减数列 给定一个长度为 n 的整数数组,你的任务是判断在最多改变 1 个元素的情况下,该数组能否变成一个非递减数列。 我们是这样定义一个非递减数列的: 对于数组中所有的 i (1 <= i < n),满足 array[i] <= array[i + 1]。 示例 1: 输入: [4,2,3] 输出: True 解释: 你可以通过把第一个4变成1来使...

WangXu__的博客 184

leetcode:665. 非递减数列

改变拐点(nums[i] > nums[i + 1])的方法也就两种:要么将nums[i]缩小,要么将nums[i+1]放大。的过程,如果存在,那么看能不能。

OceanStar的博客 1677

力扣解题思路:665. 非递减数列

665. 非递减数列 思路:题目要求判断一个数组是否能只修改一个数就成为非递减数组。,当出现 nums[i] < nums[i - 1] 时,需要考虑的是应该修改数组的num[i]还是num[i-1],使得本次修改能使 i 之前的数组成为非递减数组,并且 不影响后续的操作 -> 优先考虑令 nums[i - 1] = nums[i],因为如果修改 nums[i] = nums[i - 1] 的话,那么 nums[i] 这个数会变大,就有可能比 nums[i + 1] 大,从而影响了后续操作。还有

qq_39879315的博客 269

leetcode 665. 非递减数列——数组

665. 非递减数列 题目来源:力扣(LeetCode) https://leetcode-cn.com/problems/non-decreasing-array/ 解题思路: 原问题分解为子问题 ——》 求解子问题的最优解 ——》 合并子问题最优解得到原问题最优解。 本题简单的分解,可以考虑将连续的三个元素作为一个子问题,判断是否为非递减序列;此时会想到原数组元素没有三个,那么只有一个或两个元素的数组单独拿出来考虑,此时一定可以得到原问题的解,直接返回 true。 数组含有三个及以上的元素,每三个元素作

longool的博客 285
上一篇: Leetcode406. 根据身高重建队列
下一篇: 计算机图形学 | 有趣的测试和合并——片元操作
UestcXiye
博客等级 码龄8年 9032粉丝 1306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值