打卡力扣题目七

#左耳听风 ARST 打卡活动重启#

目录

 一、题目

二、解题方法一

三、解题方法二


 关于 ARTS 的释义 —— 每周完成一个 ARTS:
● Algorithm: 每周至少做一个 LeetCode 的算法题
● Review: 阅读并点评至少一篇英文技术文章
● Tips: 学习至少一个技术技巧
● Share: 分享一篇有观点和思考的技术文章

希望通过此次活动能聚集一波热爱技术的人,延续好奇、探索、实践、分享的精神。
 


 一、题目

给你一个长度为 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
解释: 你不能在只改变一个元素的情况下将其变为非递减数列。

二、解题方法一

def checkPossibility(nums):for i in range(len(nums) - 1):if nums[i] > nums[i + 1]:# 如果当前元素比下一个元素大,则需要将当前元素减小或将下一个元素增大# 为了只改变一个元素,我们可以将当前元素减小到比下一个元素小的最小值# 或者将下一个元素增大到比当前元素大的最小值# 因此,我们只需要找到这两个数中的最小值即可return min(nums[i], nums[i + 1]) < max(nums[i], nums[i + 1])# 如果所有元素都满足非递减的条件,则返回 Truereturn True

这段代码实现了一个函数 `checkPossibility`,用于判断在最多改变 1 个元素的情况下,给定的整数数组是否能变成一个非递减数列。

函数的输入参数为一个整数数组 `nums`。

首先,我们使用一个循环遍历数组中的每个元素 `i`,并检查当前元素 `nums[i]` 是否比下一个元素 `nums[i + 1]` 大。如果是,则说明当前元素需要被修改,以使得整个数组能够变成非递减数列。

为了只改变一个元素,我们可以将当前元素 `nums[i]` 减小到比下一个元素 `nums[i + 1]` 小的最小值,或者将下一个元素 `nums[i + 1]` 增大到比当前元素 `nums[i]` 大的最小值。因此,我们只需要找到这两个数中的最小值即可。

具体来说,我们可以使用 Python 内置函数 `min()` 来找到两个数中的最小值。如果这个最小值小于等于另一个数,则说明它们可以相等,即不需要进行任何操作;否则,我们需要将较小的那个数减小到等于较大的那个数。

最后,如果所有元素都满足非递减的条件,则返回 True;否则,返回 False。

三、解题方法二

另一种解决方法是使用双指针法。具体来说,我们可以定义两个指针 `left` 和 `right`,分别指向数组的开头和结尾。然后,我们从左到右遍历数组中的每个元素,并检查当前元素是否小于等于右边的元素。如果是,则说明当前元素需要被修改,以使得整个数组能够变成非递减数列。

为了只改变一个元素,我们可以将当前元素 `nums[i]` 减小到比右边的元素 `nums[j]` 小的最小值,或者将右边的元素 `nums[j]` 增大到比当前元素 `nums[i]` 大的最小值。因此,我们只需要找到这两个数中的最小值即可。

具体来说,我们可以使用双指针法来实现这个算法。首先,我们将 `left` 指针指向数组的第一个元素,将 `right` 指针指向数组的最后一个元素。然后,我们从左到右遍历数组中的每个元素 `i`,并检查当前元素是否小于等于右边的元素 `nums[j]`。如果是,则说明当前元素需要被修改,我们需要移动 `left` 指针到下一个位置,并更新左边的最小值;否则,我们需要移动 `right` 指针到前一个位置,并更新右边的最小值。最后,如果所有元素都满足非递减的条件,则返回 True;否则,返回 False。

这个算法的时间复杂度为 O(n),其中 n 为数组的长度。

def checkPossibility(nums):left, right = 0, len(nums) - 1for i in range(len(nums)):while left < right and nums[left] > nums[i]:# 如果左边的元素比当前元素大,则将左边的指针向右移动一位left += 1while left < right and nums[right] < nums[i]:# 如果右边的元素比当前元素小,则将右边的指针向左移动一位right -= 1if left >= right:# 如果左边的指针已经到达了数组的末尾,说明无法通过修改元素使得整个数组变成非递减数列return False# 将当前元素修改为左边和右边中的最小值,以满足非递减的条件nums[i] = min(nums[left], nums[right])return True

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

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

相关文章

【MTK平台】【wpa_supplicant】关于wpa_supplicant_8/src/p2p/p2p_go_neg.c文件的介绍

本文主要介绍external/wpa_supplicant_8/src/p2p/p2p_go_neg.c文件 这里主要介绍2个方法 1. p2p_connect_send接受来自 p2p.c 文件中调用p2p_connect方法发送的GON Request帧 2. p2p_process_go_neg_resp处理来自GON Response帧的处理流程 先看下p2p_connect_send方法 int p…

数据结构:顺序表(C实现)

个人主页 水月梦镜花 个人专栏 C语言 &#xff0c;数据结构 文章目录 一、顺序表二、实现思路1.存储结构2.初始化顺序表(SeqListInit)3.销毁顺序表(SeqListDestroty)4.打印顺序表(SeqListPrint)5.顺序表尾插(SeqListPushBack)and检查容量(SeqListCheckCapacity)6.顺序表头插(Se…

K8S群集调度

目录 一、调度约束二、Pod 启动典型创建过程三、K8S的调度过程3.1 Predicate&#xff08;预选策略&#xff09; 常见的算法使用3.2 常见优先级选项3.3 指定调度节点3.3.1 nodeName指定3.3.2 nodeSelector指定3.3.3 Pod亲和性与反亲和1.节点亲和硬策略示例2.节点亲和软策略示例3…

QEMU源码全解析18 —— QOM介绍(7)

接前一篇文章&#xff1a;QEMU源码全解析17 —— QOM介绍&#xff08;6&#xff09; 本文内容参考&#xff1a; 《趣谈Linux操作系统》 —— 刘超&#xff0c;极客时间 《QEMU/KVM》源码解析与应用 —— 李强&#xff0c;机械工业出版社 特此致谢&#xff01; 上一回完成了对…

Redis发布订阅机制学习|kafka相关经验

Redis 发布订阅机制 简介&#xff1a; Redis 发布订阅&#xff08;Pus/Sub&#xff09;是一种消息通信模式&#xff1a;发送者通过 PUBLISH发布消息&#xff0c;订阅者通过 SUBSCRIBE 订阅接收消息或通过UNSUBSCRIBE 取消订阅。主要由「发布者」、「订阅者」、「Channel」三个部…

linux -网络编程-多线程并发服务器

目录 1.三次握手和四次挥手 2 滑动窗口 3 函数封装思想 4 高并发服务器 学习目标&#xff1a; 掌握三次握手建立连接过程掌握四次握手关闭连接的过程掌握滑动窗口的概念掌握错误处理函数封装实现多进程并发服务器实现多线程并发服务器 1.三次握手和四次挥手 思考: 为什么…

[SQL挖掘机] - 多表连接: union

介绍: sql中的union是用于合并两个或多个select语句的结果集的操作符。它将多个查询的结果合并成一个结果集&#xff0c;并自动去除重复的行。请注意&#xff0c;union操作要求被合并的查询返回相同数量和类型的列。 用法: union的基本语法如下&#xff1a; select_stateme…

【javaSE】 面向对象程序三大特性之继承

目录 为什么需要继承 继承的概念 继承的语法 注意事项 父类成员访问 子类中访问父类的成员变量 子类和父类不存在同名成员变量 子类和父类成员变量同名 访问原则 子类中访问父类的成员方法 成员方法名字不同 总结&#xff1a; 成员方法名字相同 总结&#xff1a; …

深入理解JVM:Java使用new创建对象的流程

1、创建对象的几种方式 ①new 对象 ②反射 ③对象的复制 ④反序列化 2、创建对象流程 先看看常量池里面有没有&#xff0c;如果有&#xff0c;就用常量池的看这个类有没有被加载过&#xff0c;如果没有&#xff0c;就执行类加载以及类的初始化。&#xff08;对象的大小&#…

【决策树-鸢尾花分类】

决策树算法简介 决策树是一种基于树状结构的分类与回归算法。它通过对数据集进行递归分割&#xff0c;将样本划分为多个类别或者回归值。决策树算法的核心思想是通过构建树来对数据进行划分&#xff0c;从而实现对未知样本的预测。 决策树的构建过程 决策树的构建过程包括以…

数据结构:单链表的实现(C语言)

个人主页 &#xff1a; 水月梦镜花 个人专栏 &#xff1a; 《C语言》 《数据结构》 文章目录 前言一、单链表实现思路和图解1.节点的定义(SListNode)2.申请一个节点(BuySListNode)3.单链表打印(SListPrint)4.单链表尾插(SListPushBack)5.单链表的头插(SListPushFront)6.单链表的…

【目标检测】基于yolov5的水下垃圾检测(附代码和数据集,7684张图片)

写在前面: 首先感谢兄弟们的订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。 路虽远,行则将至;事虽难,做则必成。只要有愚公移山的志气、滴水穿石的毅力,脚踏实地,埋头苦干,积跬步以至千里,就…

Spring Boot概述:构建稳定、高效的分布式应用

目录 ✨正文 ✨特性 ✨与spring的关系 ✨Spring Cloud的关系 ✨总结 ✨正文 Spring Boot是一个备受欢迎的Java开发框架&#xff0c;旨在简化和加速Spring应用程序的开发和部署。作为Spring生态系统的一部分&#xff0c;Spring Boot通过提供合理的默认配置和开箱即用的功能…

行云管家荣获CFS第十二届财经峰会 “2023产品科技创新奖”

7月26日至27日&#xff0c;CFS第十二届财经峰会暨2023可持续商业大会在京盛大召开。峰会主题为“激活高质量发展澎湃活力”&#xff0c;超1000位政商领袖、专家学者、企业及媒体代表出席了本次盛会&#xff0c;共同分享新技术新产品新趋势、研判全球新挑战与新变局下企业的机遇…

【方法】PDF可以转换成Word文档吗?如何操作?

很多人喜欢在工作中使用PDF&#xff0c;因为PDF格式可以准确地保留文档的原始格式&#xff0c;比如字体、图像、布局和颜色等。 但如果编辑文档的话&#xff0c;PDF还是没有Word文档方便。那可以将PDF转换成Word格式&#xff0c;再来编辑吗&#xff1f;如何操作呢&#xff1f;…

接口自动化测试平台

下载了大神的EasyTest项目demo修改了下<https://testerhome.com/topics/12648 原地址>。也有看另一位大神的HttpRunnerManager<https://github.com/HttpRunner/HttpRunnerManager 原地址>&#xff0c;由于水平有限&#xff0c;感觉有点复杂~~~ 【整整200集】超超超…

Java:Java程序通过执行系统命令调用Python脚本

本文实现功能&#xff1a;Java程序调用Python脚本 Python脚本 import sysdef add(x, y):return x yif __name__ "__main__":print(add(int(sys.argv[1]), int(sys.argv[2])))直接执行 $ python math.py 1 2 3Java程序调用Python脚本 package io.github.mouday.…

《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(13)-Fiddler请求和响应断点调试

1.简介 Fiddler有个强大的功能&#xff0c;可以修改发送到服务器的数据包&#xff0c;但是修改前需要拦截&#xff0c;即设置断点。设置断点后&#xff0c;开始拦截接下来所有网页&#xff0c;直到取消断点。这个功能可以在数据包发送之前&#xff0c;修改请求参数&#xff1b…

JVM复习(史上最全!!!)

一、JDK、JRE、JVM的区别 JDK: 全称Java Development Kit&#xff0c;是 Java 语言的软件开发工具包&#xff0c;主要用于移动设备、嵌入式设备上的Java应用程序。JDK是整个Java开发的核心。 JRE: JRE&#xff0c;全称Java Runtime Environment&#xff0c;是指Java的运行环境&…

c++通过自然语言处理技术分析语音信号音高

对于语音信号的音高分析&#xff0c;可以使用基频提取技术。基频是指一个声音周期的重复率&#xff0c;也就是一个声音波形中最长的周期。 通常情况下&#xff0c;人的声音基频范围是85Hz到255Hz。根据语音信号的基频可以推断出其音高。 C中可以使用数字信号处理库或语音处理库…