Leetcode(665)——非递减数列

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

Leetcode(665)——非递减数列

题目

给你一个长度为 n 的整数数组 nums ,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列。

我们是这样定义一个非递减数列的: 对于数组中任意的 i (0 <= i <= n-2),总满足 nums[i] <= nums[i + 1]。

示例 1:

输入: nums = [4,2,3]
输出: true
解释: 你可以通过把第一个 4 变成 1 来使得它成为一个非递减数列。

示例 2:

输入: nums = [4,2,1]
输出: false
解释: 你不能在只改变一个元素的情况下将其变为非递减数列。

提示:

  • n == nums.length
  • 1 <= n <= 104
  • -105 <= nums[i] <= 105

题解

方法一:贪心算法

思路

​​  首先思考如下问题:要使数组 nums\textit{nums}nums 变成一个非递减数列,数组中最多有多少个 iii 满足 nums[i]>nums[i+1]\textit{nums}[i]>\textit{nums}[i+1]nums[i]>nums[i+1]?

最多一个。

​​  假设有两个不同的下标 iii, jjj 满足上述不等式,不妨设 i<ji<ji<j。

  1. 若 i+1<ji+1<ji+1<j,则无论怎么修改 nums[i]\textit{nums}[i]nums[i] 或 nums[i+1]\textit{nums}[i+1]nums[i+1],都不会影响 nums[j]\textit{nums}[j]nums[j] 与 nums[j+1]\textit{nums}[j+1]nums[j+1] 之间的大小关系;修改 nums[j]\textit{nums}[j]nums[j] 或 nums[j+1]\textit{nums}[j+1]nums[j+1] 也同理。因此,这种情况下,我们无法将 nums\textit{nums}nums 变成非递减数列。
  2. 若 i+1=ji+1=ji+1=j,则有 nums[i]>nums[i+1]>nums[i+2]\textit{nums}[i]>\textit{nums}[i+1]>\textit{nums}[i+2]nums[i]>nums[i+1]>nums[i+2]。同样地,无论怎么修改其中一个数,都无法使这三个数变为 nums[i]≤nums[i+1]≤nums[i+2]\textit{nums}[i]\le\textit{nums}[i+1]\le\textit{nums}[i+2]nums[i]≤nums[i+1]≤nums[i+2] 的大小关系。

​​  满足这个条件就足够了吗?并不,对于满足该条件的数组 [3,4,1,2][3,4,1,2][3,4,1,2] 而言,无论怎么修改也无法将其变成非递减数列。
​​  因此,若找到了一个满足 nums[i]>nums[i+1]\textit{nums}[i]>\textit{nums}[i+1]nums[i]>nums[i+1] 的 iii,在修改 nums[i]\textit{nums}[i]nums[i] 或 nums[i+1]\textit{nums}[i+1]nums[i+1] 之后,还需要检查 nums\textit{nums}nums 是否变成了非递减数列。

​​  我们可以将 nums[i]\textit{nums}[i]nums[i] 修改成小于或等于 nums[i+1]\textit{nums}[i+1]nums[i+1] 的数,但由于还需要保证 nums[i]\textit{nums}[i]nums[i] 不小于它之前的数,nums[i]\textit{nums}[i]nums[i] 越大越好,所以将 nums[i]\textit{nums}[i]nums[i] 修改成 nums[i+1]\textit{nums}[i+1]nums[i+1] 是最佳的;同理,对于 nums[i+1]\textit{nums}[i+1]nums[i+1],修改成 nums[i]\textit{nums}[i]nums[i] 是最佳的。

能否只遍历一次遍历 nums\textit{nums}nums 数组呢?
​​  修改 nums[i]\textit{nums}[i]nums[i] 为 nums[i+1]\textit{nums}[i+1]nums[i+1] 后,还需要保证 nums[i−1]≤nums[i]\textit{nums}[i-1]\le\textit{nums}[i]nums[i−1]≤nums[i] 仍然成立,即 nums[i−1]≤nums[i+1]\textit{nums}[i-1]\le\textit{nums}[i+1]nums[i−1]≤nums[i+1],若该不等式不成立则整个数组必然不是非递减的,则需要修改 nums[i+1]\textit{nums}[i+1]nums[i+1] 为 nums[i]\textit{nums}[i]nums[i]。修改完后,接着判断后续数字的大小关系。在遍历中统计 nums[i]>nums[i+1]\textit{nums}[i]>\textit{nums}[i+1]nums[i]>nums[i+1] 的次数,若超过一次可以直接返回 false\text{false}false。

代码实现
class Solution {
public:
    bool checkPossibility(vector<int>& nums) {
        // 1.找到第一对导致序列为非递减的两个值(前者大于后者),找不到则返回true
        // 2.找到第一对导致序列为非递减的两个值,判断第一个值的前者是否小于等于第二个值,若为true则继续,若为false则
        // 判断第一个值是否小于等于第二个值的后者,若为true则继续,否则返回false
        // 3.再判断后序列是否都为非递减数列,即能否找到第二对导致序列为非递减的两个值,找到返回false,否则返回true
        int size = nums.size(), non_value = 0;  // non_value 表示导致序列为非递减地方的个数
        if(size <= 2) return true;  // 若小于等于2,则一定可以在最多改变1个元素的情况下使得该数组变成一个非递减数列
        for(int n = 1; n < size; n++){
            if(nums[n-1] > nums[n]){
                // 非递减的两个值
                if(++non_value <= 1) {
                    // 还要注意是否是 n-1 是否是第一个值和 n 是否是最后一个值的特殊情况
                    if(n == 1 || nums[n-2] <= nums[n] || n == size-1 || nums[n-1] <= nums[n+1]) continue;
                    else return false;
                }else return false;
            }
        }
        return true;
    }
};
复杂度分析

时间复杂度:O(n)O(n)O(n),其中 nnn 是数组 nums\textit{nums}nums 的长度。
空间复杂度:O(1)O(1)O(1)

医疗器械软件测试输出内容(1) *单元测试(Unit Testing):**单元测试是软件测试的最底层,用于验证软件中最小的可测试单元——函数、方法或模块。系统测试是在集成测试之后进行的,它对整个系统进行测试,验证系统在不同部分集成在一起后是否满足需求和规格。: 集成测试是在单元测试之后进行的,它关注不同单元之间的交互和集成。对于不同安全级别的软件(IEC 62304 A类、B类、C类),在体系上要求输出的文件内容有所区别。**说明:**将集成测试和软件系统测试合并为一项单一的计划和一组活动是可接收的。 阅读详情

相关推荐

CH341的I2C流模式(StreamI2C)到底怎么用?从EEPROM读写到自定义设备,一篇讲清参数配置逻辑

本文详细解析了CH341的I2C流模式(StreamI2C)的使用方法,从EEPROM读写到自定义设备的参数配置逻辑。通过深入分析I2C协议基础、StreamI2C参数映射关系及典型设备配置示例,帮助开发者快速掌握StreamI2C的应用技巧,解决实际开发中的常见问题。

weixin_30932215的博客 446

刷题遇到‘非递减’,非递减是什么意思?不可以乱序

非递减的意思

weixin_43850639的博客 6765

用AI免费制作30分钟电影:完整工作流与实操解析

AI视频生成技术正大幅降低影视创作门槛,但真正制作一部完整电影并非一键生成,而是涉及剧本、分镜、画面、配音、剪辑的复杂流水线。理解其基本原理,是将文本转化为连续视觉叙事的关键。对于创作者而言,掌握角色一致性控制、素材批量管理、免费额度合理分配等技术价值,能有效避免生成结果崩坏与资源浪费。该能力可广泛应用于短视频创作、独立电影预演、教学演示等场景。本文以30分钟AI电影制作为例,拆解从工具选择到成片输出的全流程,重点分析免费方案下的时间与积分成本,以及最容易翻车的环节,并给出基于实践验证的排查与优化策略。

weixin_29056865的博客 317

86.非递减数列

文章目录一、题目描述二、解题思路三、代码演示 一、题目描述 给你一个长度为 n 的整数数组,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列。 我们是这样定义一个非递减数列的: 对于数组中任意的 i (0 <= i <= n-2),总满足 nums[i] <= nums[i + 1]。 二、解题思路 对于数组中只有一个元素,那肯定是非递减数列;当有两个元素时,可以有两种方案: 方案一:nums[i-1] = nums[i] 方案二:num[i] = nums[i

Quiet_han的博客 280

别再瞎调了!手把手教你搞定STM32步进电机PID速度环(附完整代码与比例系数详解)

本文详细解析了STM32步进电机PID速度环的完整实现过程,从算法输出到脉冲频率的转换链路,重点讲解了比例系数的确定方法及系统标定实验。通过完整的代码示例和调试技巧,帮助工程师解决实际应用中的常见问题,提升步进电机控制精度与稳定性。

weixin_28729331的博客 213

uniapp [安卓苹果App端] - 详细实现自定义水印相机功能,调用手机摄像头打开相机并在周围悬挂自定义水印,使用相机拍照后添加水印文字或样式,uniapp APP端水印相机完整源码,兼容强大可靠

uni-app,安卓Android,苹果ios,安卓app端,苹果App端,uniapp苹果app,水印相机,uniapp水印相机,Uniapp安卓app实现水印相机,uniapp苹果ios水印相机,打开系统相机拍照添加水印,地点打卡相机,水印相机(水印照片,图片加水印),uniapp自定义水印相机,制作水印相机给图片添加水印并且保存图片至本地,uniapp拍照图片加水印,水印相机功能,手机调起摄像头拍照时自动插入文字、图片动态水印效果,支持水印显示拍摄者当前城市定位、自由调整水印大小和位置,手机拍照时

🏆 前端领域优质创作者 1万+

非递减数列

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

明月几时有,把酒问青天 374

【unity实战】Unity游戏开发:如何用ScriptableObject与序列化多态实现可复用的模块化效果系统?

本文介绍了两种实现卡牌游戏效果系统的模块化设计方案。方案一使用ScriptableObject创建独立的效果资产,通过组合实现不同效果,优点是数据可复用、可视化编辑,缺点是同类不同参数效果需创建大量SO文件。方案二利用SerializeReference特性直接嵌套效果实例,避免SO文件过多,但需要插件支持编辑器多态显示。两种方案都将效果与卡牌解耦,提高了代码复用性和扩展性,解决了硬编码带来的重复、维护困难和扩展不便等问题。开发者可根据项目需求选择合适方案,或结合两者优势构建更灵活的系统。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 435

【LeetCode】非递减序列

题目 给你一个长度为 n 的整数数组,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列。 我们是这样定义一个非递减数列的: 对于数组中所有的 i (0 <= i <= n-2),总满足 nums[i] <= nums[i + 1]。 贪心 我们只有一次可以修改数组元素的机会 但是这里有一个修改的值为多少的问题 我们只有两种方式去修改 1.nums[i]=nums[i+1] 2.nums[i+1]=nums[i] 但是这两种方法也都是有不足的地方的 下面我给出两个极

weixin_44302602的博客 759

基于Simulink的单级式光伏并网系统MPPT控制仿真

本文基于Simulink平台,详细介绍了单级式光伏并网系统的MPPT控制仿真实现。主要内容包括:1)阐述MPPT作为光伏系统"智能大脑"的核心作用;2)解析单级式系统架构及扰动观察法(P&O)算法原理;3)以10kW户用系统为例,分步骤演示建模过程,包括光伏阵列搭建、P&O控制器实现(含MATLAB代码)、并网控制设计等;4)通过仿真验证系统在光照突变下的动态响应性能,MPPT效率达98.3%。文章还提出了变步长P&O等优化方向,为光伏系统仿真与控制提供实用指导。

xiaoheshang_123的博客 111

基于Solidworks的三维光路结构示意图绘制实例演示-技术细节

基于Solidworks的三维光路结构示意图绘制实例演示-技术细节

简单光学 1万+

Leetcode题目练习总结(持续更新......)

leetcode921.使括号有效的最少添加 给定一个由 ‘(’ 和 ‘)’ 括号组成的字符串 S,我们需要添加最少的括号( ‘(’ 或是 ‘)’,可以在任何位置),以使得到的括号字符串有效。 从形式上讲,只有满足下面几点之一,括号字符串才是有效的: 它是一个空字符串,或者 它可以被写成 AB (A 与 B 连接), 其中 A 和 B 都是有效字符串,或者 它可以被写作 (A),其中 A 是有效字符串。 给定一个括号字符串,返回为使结果字符串有效而必须添加的最少括号数。 示例 1: 输入:"())" 输出:

weixin_44635296的博客 8705

一文搞懂自适应激光控制技术,开启光学新时代

自适应激光控制技术作为现代光学领域的关键技术,以其独特的原理和高效的工作机制,在科研、工业等众多领域展现出了巨大的应用价值。通过对激光波前的实时测量与补偿,它成功克服了激光在传输和应用过程中面临的诸多挑战,显著提升了激光的光束质量和应用效果。在科研领域,它助力天文观测突破大气湍流的限制,让我们得以更清晰地窥探宇宙的奥秘;在激光核聚变研究中,为实现高效的核聚变反应提供了关键支持,为解决能源问题带来了新的希望。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 2529

力扣 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的博客 504

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

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

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

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

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

jeanlu的博客 602

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

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

leetcode之Java刷题

小李子Lee 194

LeetCode-665. 非递减数列

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

m0_75107602的博客 533

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的博客 252

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. 非递减数列

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

Sophia_fez的博客 486

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的博客 133

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

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

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

longool的博客 285
上一篇: Leetcode(122)——买卖股票的最佳时机 II
下一篇: Leetcode(167)——两数之和 II - 输入有序数组
486L
博客等级 码龄7年 20粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值