665. 非递减数列

news2024/10/7 8:23:42

给你一个长度为 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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/non-decreasing-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路:

判断相邻两个数的大小,当前数字为 num[i] ,前一个数字为 num[i-1],如果当前数字大于或等于前一个数字,满足条件,继续向后遍历,如果当前数字小于前一个数字,不满足递增的要求,就必须要修改 nums[i] 和 nums[i-1] 之中的一个数字。

修改数字时有两种修改方式:

1>将 nums[i-1] 修改为 nums[i],这样操作是将两个数字中较大的数改为了较小的数。

2>将 nums[i] 修改为 nums[i-1],这样操作是将两个数字中较大的数改为了较大的数。

通常情况下,更倾向于使用第一种方式进行修改,因为如果修改 nums[i],会将其增大,这样可能会导致nums[i]大于其后的数字,从而影响后面的操作,可观察下图(1)。

而只有一种情况比较特殊,可观察下图(2)。就是如果 num[i-2] 也大于 nums[i],如果此时将 nums[i-1] 修改为比其笑得数nums[i],就会导致数列不是递增的,此时就要修改 nums[i] 为 nums[i-1]

                                    图(1)                                                            图(2)

代码实现如下:

class Solution {
    public boolean checkPossibility(int[] nums) {
        int length = nums.length;
        int cnt = 0;
        for (int i = 1; i < length && cnt < 2; ++i) {
            if (nums[i] >= nums[i - 1]) {
                //满足非递减,继续执行
                continue;
            }
            cnt++;//表示修改过一次值
            if (i-2>=0&&nums[i-2]>nums[i]) {
                nums[i] = nums[i-1];
            } else {
                nums[i - 1] = nums[i];
            }
        }
        return cnt<2;
    }
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/441947.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第四章(1):词向量定义与意义

第四章&#xff08;1&#xff09;&#xff1a;词向量定义与意义 目录 第四章&#xff08;1&#xff09;&#xff1a;词向量定义与意义前言1. 词的表示1.1 离散表示1.1.1 One-Hot独热编码1.1.2 ngram特征表示 1.2 分布式表示 2. 意义 前言 在自然语言处理的领域中&#xff0c;每…

电容-基础知识

1、电容两端电压 不能激变&#xff0c;所以可以起到稳定电压作用 2、电容的种类&#xff1a;瓷片电容、插件电解电容、贴片电解电容、钽电容、CBB电容、插件瓷片电容、&#xff08;X电容、Y电容&#xff0c;属于安规电容&#xff0c;对功能没有影响&#xff0c;对性能没有影响…

权限控制_SpringSecurity

认证-授权 认证&#xff1a;系统提供的用于识别用户身份的功能&#xff0c;通常提供用户名和密码进行登录其实就是在进行认证&#xff0c;认证的目的是让系统知道你是谁。 授权&#xff1a;用户认证成功后&#xff0c;需要为用户授权&#xff0c;其实就是指定当前用户可以操作…

【Qt】随记1:#if 1/0 #else #endif的用法

欢迎阅读本博文&#xff0c;本文主要记录Qt学习、工作中的一些注意点及相关笔记&#x1f4c3; 希望记录的内容有帮助到你&#xff0c;也欢迎把你知道的分享给大家&#xff0c;一起进步&#xff01;&#x1f389; 喜欢的话&#xff0c;请帮忙点赞&#x1f44d;、评论&#x1f4…

【排序】快速排序(递归和非递归)

快速排序 前言图解大致思路对于hoare版本对于挖坑法对于前后指针法 实现方法递归非递归 快排的优化&#xff08;基于递归的优化&#xff09;三数取中法小区间优化 时间复杂度和空间复杂度 前言 快速排序&#xff0c;听名字就比较霸道&#xff0c;效率根名字一样&#xff0c;非…

winForm登录页面知识点

先看界面 引用知识 控件&#xff1a;label,Textbox,button还有各自的属性和事件Trim()方法的使用&#xff0c;IsNullOrEmpty()方法的使用&#xff0c;Show()方法的使用 Label 属性 NameText:设置或获取文本信息image:显示图像ImageList:图像集控件SizeTag:与控件相关的自定…

Gorm的关联模型

Belongs To 将一个模型与另一个模型建立一对一的关系 例如&#xff1a;一张银行卡只能分配给一个用户&#xff0c;在User结构体里面创建一个CreditCardId外键关系&#xff0c;然后在User结构体里面嵌套一个CreditCard结构体 // Belongs To // 用户 type User struct {gorm.M…

十个超级好用的Javascript技巧

概览&#xff1a;在实际的开发工作过程中&#xff0c;积累了一些常见又超级好用的Javascript技巧和代码片段&#xff0c;包括整理的其他大神的JS使用技巧&#xff0c;今天筛选了10个&#xff0c;以供大家参考。 动态加载JS文件 在一些特殊的场景下&#xff0c;特别是一些库和…

自己动手做chatgpt:解析gpt底层模型transformer的输入处理

前面我们完成了一些基本概念&#xff0c;如果你对深度学习的基本原理还不了解&#xff0c;你可以通过这里获得更多信息&#xff0c;由于深度学习的教程汗牛充栋&#xff0c;因此我在这里不会重复&#xff0c;而是集中精力到chatgpt模型原理的分析&#xff0c;实现和实践上。Cha…

初识C语言————3

博主这篇文章浅谈一下自己对函数和数组的理解。之后会详细说明。 文章目录 一、函数 二、数组 1、数组定义 2、数组的下标 3、数组的使用 一、函数 函数可以理解为一个模块的代码&#xff0c;完成一个独立的功能。 #include <stdio.h> int main() {int num1 0;int num…

ASEMI代理ADM3051CRZ-REEL7原装ADI车规级ADM3051CRZ-REEL7

编辑&#xff1a;ll ASEMI代理ADM3051CRZ-REEL7原装ADI车规级ADM3051CRZ-REEL7 型号&#xff1a;ADM3051CRZ-REEL7 品牌&#xff1a;ADI/亚德诺 封装&#xff1a;SOIC-8 批号&#xff1a;2023 引脚数量&#xff1a;8 安装类型&#xff1a;表面贴装型 ADM3051CRZ-REEL7汽…

【Python】读取rdata类型数据转为csv excel格式文件, 无需安装r语言基于pyreadr+pandas实现数据分析(保姆级注释)

目录 环境配置取得数据名 datas.keys()取得pandas的DataFrame类型数据一些数据分析例程供入门同学学习转化为csv excel格式所有数据 转化为csv取前面100行数据 快速测试能否转化csv取前面100行数据 快速测试能否转化xlsx 完整例程总结 欢迎关注 『Python』 系列&#xff0c;持续…

简述AutoGPT原理(提示词)

启动时需要设置三个项目&#xff1a;机器人名字、设定给机器人的角色、要完成的目标。 根据你的设定利用ChatGPT进行下一步的抉择&#xff0c;具体的&#xff0c;实际上归功于提示词&#xff1a; 下面这段提示词在干什么呢&#xff1f; 将设定的名字、角色、目标告诉ChatGPT&…

【U8+】用友U8+对账不平案例及方法总结

【问题需求】 在使用用友U8软件过程中&#xff0c;由于软件涉及到多方面的对账。 所以经常会遇到期初或结账时对账不平。 【经验分享】 在众多对账中&#xff0c; 只有当【总账上下级】&#xff08;即&#xff1a;总账与明细账对账&#xff09;不平的时候&#xff0c; 软件才…

春秋云境:CVE-2022-26965(后台RCE)

目录 一、题目 二、 利用cms主题构造木马 一、题目 介绍&#xff1a; Pluck-CMS-Pluck-4.7.16 后台RCE 进入题目&#xff1a; cms页面 点击admin进行登录&#xff1a; 弱口令admin登录&#xff1a; 成功登录进去&#xff1a; 国产化一下&#xff1a; 选项---选择主题 点击…

漏洞分析丨cve20144113

一、漏洞简述 Microsoft Windows下的 win32k.sys是Windows子系统的内核部分&#xff0c;是一个内核模式设备驱动程序&#xff0c;它包含有窗口管理器、后者控制窗口显示和管理屏幕输出等。如果Windows内核模式驱动程序不正确地处理内存中的对象&#xff0c;则存在一个特权提升…

js对象案例练习

个人名片&#xff1a; &#x1f60a;作者简介&#xff1a;一名大一在校生&#xff0c;web前端开发专业 &#x1f921; 个人主页&#xff1a;python学不会123 &#x1f43c;座右铭&#xff1a;懒惰受到的惩罚不仅仅是自己的失败&#xff0c;还有别人的成功。 &#x1f385;**学习…

SQL Server的日志传送

日志传送和复制 一、前言二、相关术语和定义三、日志传送和复制3.1、在主数据库丢失时从辅助数据库进行复制的要求和过程3.2、使用事务复制进行日志传送3.3、使用合并复制进行日志传送 一、前言 日志传送允许您自动将事务日志备份从主服务器实例上的主数据库发送到单独辅助服务…

思维导图手撕MyBatis源码

文章目录 前置准备通过类加载器读取配置文件流创建sqlSessionFactory建造者模式的使用 打开SqlSession获取Mapper接口对象执行Mapper接口方法 前置准备 既然要读MyBatis的源码&#xff0c;那么我们就要先弄清楚MyBatis的入口在哪。这里我们直接写一个标准的MyBatis使用程序&am…

Node 【Buffer 与 Stream】

文章目录 &#x1f31f;前言&#x1f31f;Buffer&#x1f31f; Buffer结构&#x1f31f; 什么时候用Buffer&#x1f31f; Buffer的转换&#x1f31f; Buffer使用&#x1f31f; 创建Buffer&#x1f31f; 字符串转Buffer&#x1f31f; Buffer转字符串&#x1f31f; 拼接Buffer&am…