算法小白的进阶之路(力扣6~8)
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨
前言
本栏目将记录博主暑假从0开始刷力扣的算法题,每一条题目我都会把知识点抽丝剥茧地进行分析,以便大家更好的理解和学习,话不多说,肝!
序号 | 标题 | 力扣序号 |
6 | 找到数组中消失的数字 | 448 |
7 | 最大连续1的个数 | 485 |
8 | 提莫攻击 | 495 |
1.找到数组中消失的数字
题目:
给你一个含 n
个整数的数组 nums
,其中 nums[i]
在区间 [1, n]
内。请你找出所有在 [1, n]
范围内但没有出现在 nums
中的数字,并以数组的形式返回结果。
示例 1:
输入:nums = [4,3,2,7,8,2,3,1] 输出:[5,6]
示例 2:
输入:nums = [1,1] 输出:[2]
解题思路:
对 1−n 的所有数字进行遍历,判断每个数字是否在数组中存在。
第一次遍历,把存在的数都赋值为true,第二次遍历,即选出不存在(false)的数存进数组。
代码(Java)
class Solution { // 定义一个公开的方法,用于找到缺失的数字并返回它们的列表 public List<Integer> findDisappearedNumbers(int[] nums) { // 创建一个空的ArrayList来存储结果 List<Integer> result = new ArrayList<>(); // 获取数组的长度 int n = nums.length; // 创建一个布尔数组,用于记录1到n(包含n)中的每个数字是否出现过 // 数组长度为n+1是因为数组索引从0开始,但我们要检查的数字从1开始 boolean[] isPresnet = new boolean[n+1]; // 遍历输入数组中的每个数字 for (int num : nums) { // 如果数字在有效范围内(即1到n之间),则标记对应的布尔数组元素为true if (num >= 1 && num <= n) { isPresnet[num] = true; } // 注意:如果num不在这个范围内,我们就不管它,因为题目只关心1到n之间的数字 } // 再次遍历从1到n的每个数字 for (int i = 1; i <= n; i++) { // 如果某个数字在输入数组中未出现过(即对应的布尔数组元素为false) // 则将这个数字添加到结果列表中 if(!isPresnet[i]){ result.add(i); } } // 返回包含所有缺失数字的列表 return result; }
}
2.最大连续1的个数
题目:
给定一个二进制数组 nums
, 计算其中最大连续 1
的个数。
示例 :
输入:nums = [1,1,0,1,1,1] 输出:3 解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3
解题思路:
遍历数组,设置变量count来记录出现1的次数,设置变量maxCount来记录出现1的最大次数
注意:
遍历数组结束之后,需要再次使用当前的连续 1 的个数更新最大的连续 1 的个数,因为数组的最后一个元素可能是 1,且最长连续 1 的子数组可能出现在数组的末尾,如果遍历数组结束之后不更新最大的连续 1 的个数,则会导致结果错误。
代码(java):
class Solution {public int findMaxConsecutiveOnes(int[] nums) {int maxCount = 0, count = 0;int n = nums.length;for (int i = 0; i < n; i++) {if (nums[i] == 1) {count++;} else {maxCount = Math.max(maxCount,count);count = 0;}}maxCount = Math.max(maxCount,count);return maxCount;
}
}
3.提莫攻击
题目:
在《英雄联盟》的世界中,有一个叫 “提莫” 的英雄。他的攻击可以让敌方英雄艾希(编者注:寒冰射手)进入中毒状态。
当提莫攻击艾希,艾希的中毒状态正好持续
duration
秒。正式地讲,提莫在
t
发起攻击意味着艾希在时间区间[t, t + duration - 1]
(含t
和t + duration - 1
)处于中毒状态。如果提莫在中毒影响结束 前 再次攻击,中毒状态计时器将会 重置 ,在新的攻击之后,中毒影响将会在duration
秒后结束。给你一个 非递减 的整数数组
timeSeries
,其中timeSeries[i]
表示提莫在timeSeries[i]
秒时对艾希发起攻击,以及一个表示中毒持续时间的整数duration
。返回艾希处于中毒状态的 总 秒数。
示例 1:
输入:timeSeries = [1,4], duration = 2 输出:4 解释:提莫攻击对艾希的影响如下: - 第 1 秒,提莫攻击艾希并使其立即中毒。中毒状态会维持 2 秒,即第 1 秒和第 2 秒。 - 第 4 秒,提莫再次攻击艾希,艾希中毒状态又持续 2 秒,即第 4 秒和第 5 秒。 艾希在第 1、2、4、5 秒处于中毒状态,所以总中毒秒数是 4 。
示例 2:
输入:timeSeries = [1,2], duration = 2 输出:3 解释:提莫攻击对艾希的影响如下: - 第 1 秒,提莫攻击艾希并使其立即中毒。中毒状态会维持 2 秒,即第 1 秒和第 2 秒。 - 第 2 秒,提莫再次攻击艾希,并重置中毒计时器,艾希中毒状态需要持续 2 秒,即第 2 秒和第 3 秒。 艾希在第 1、2、3 秒处于中毒状态,所以总中毒秒数是 3 。
解题思路:
- 初始化变量:
ans
:用于记录艾希处于中毒状态的总时间(秒)。expired
:表示上一次中毒状态应该结束的时间点(秒)。初始化为0,因为没有前一次攻击。
- 遍历攻击时间序列:
- 遍历提莫发起攻击的时间序列
timeSeries
。对于每个时间点timeSeries[i]
,我们都需要判断这次攻击对艾希中毒状态的影响。
- 遍历提莫发起攻击的时间序列
- 判断攻击与中毒状态的关系:
- 如果
timeSeries[i]
(当前攻击时间)大于等于expired
(上一次中毒结束时间),说明这次攻击是在上一次中毒状态结束后发起的,因此艾希会再次中毒duration
秒。我们直接将duration
加到ans
上。 - 如果
timeSeries[i]
小于expired
,说明这次攻击是在上一次中毒状态结束前发起的,中毒状态会重新计时。但艾希不会额外增加duration
秒的中毒时间,而是从当前攻击时间开始算起,再持续duration
秒。因此,我们需要计算从当前攻击时间点到上一次中毒结束时间点之间的时间差(expired - timeSeries[i]
),但这部分时间其实会被新的中毒状态所覆盖,所以我们只需要加上从当前攻击时间点到新中毒结束时间的时间(即timeSeries[i] + duration - expired
),并加到ans
上。
- 如果
- 更新中毒结束时间:
- 无论哪种情况,我们都需要更新
expired
为当前攻击后duration
秒的时间点,即expired = timeSeries[i] + duration
。
- 无论哪种情况,我们都需要更新
关键点
- 理解中毒状态的计时和重置机制。
- 利用
expired
变量来跟踪上一次中毒状态应该结束的时间点。 - 通过比较
timeSeries[i]
和expired
来判断攻击对中毒状态的影响。 - 适当地更新
ans
和expired
以反映中毒状态的变化。
class Solution {public int findPoisonedDuration(int[] timeSeries, int duration) {int ans = 0;int expired = 0;for (int i = 0; i < timeSeries.length; ++i) {if (timeSeries[i] >= expired) {ans += duration;} else {ans += timeSeries[i] + duration - expired;}expired = timeSeries[i] + duration;}return ans;}
}
❤️❤️❤️小郑是普通学生水平,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
相关文章:
算法小白的进阶之路(力扣6~8)
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…...
【期货】收盘点评。昨天说的,p2409棕榈油在今天或者周一会走出行情
收盘点评 昨天说的,p2409棕榈油在今天或者周一会走出行情。事实就是如此。震荡了几天了,波幅不大的来回震荡,其实主力是不想震荡的,但是不震荡自己的货和行情走不出来。所以我昨天就说,应该就是这一两天会走出一波小行…...
LBS 开发微课堂|Polyline绘制优化:效果更丰富,性能更佳!
为了让广大的开发者 更深入地了解 百度地图开放平台的技术能力 轻松掌握满满的技术干货 更加简单地接入 开放平台的服务 我们特别推出了 “位置服务(LBS)开发微课堂” 系列技术案例 第一期的主题是 《Polyline 绘制优化升级》 你还想了解哪些…...
VS Code设置C++编译器路径
C_Cpp.default.compilerPath是C/C编译器路径; python.condaPath是conda路径....
laravel项目配置
创建laravel项目 composer create-project --prefer-dist laravel/laravel 项目名称生成项目key php artisan key:generate.清理配置缓存 php artisan config:clearlaravel生成代码 官网链接 php artisan make:model Flight --all生成Flight类相关的文件,对应数…...
Python试讲
Python试讲 导语Python简介Python及其特点如何使用Python Python与计算计算变量 导语 本次试讲内容如下:Python简介与使用,Python与基本运算 辅助教材为 《趣学Python编程》和《Python编程从入门到实践》 Python简介 Python是目前入门最简单最好学的…...
RESTful API
RESTful API是一种基于REST (Representational State Transfer) 架构风格的应用程序编程接口。它通过使用HTTP协议的不同方法(如GET、POST、PUT、DELETE等)来对资源进行操作和传输数据。 使用RESTful API构建web应用程序需要遵循以下几个步骤࿱…...
NEEP-EN2-2020-Text1
英二-2020-Text 1 摘自新科学家(New scientist)2018年11月的文章《Rats can make friends with robot rats and will rescue them when stuck》。 以下为个人解析,非官方公开标准资料,可能有误,仅供参考。(…...
摩托罗拉E6系统研究
这是很久以前研究摩托罗拉E6刷机包时总结的一些经验,不一定准确但留个纪念,希望会制作刷机包的高手交流学习。 ------------------------------------------------------------------------------------------------------------------------------- 摩…...
Spring中,ApplicationContext主要的实现类型包括?
Spring中,ApplicationContext主要的实现类型包括FileSystemXmlApplicationContext、ClassPathXmlApplicationContext、XmlWebApplicationContext、AnnotationConfigWebApplicationContext。 FileSystemXmlApplicationContext:这个实现从一个…...
JavaScript青少年简明教程:事件及处理
JavaScript青少年简明教程:事件及处理 在编程语言中,事件(Event)是一种使程序能够响应特定操作或条件发生的机制。它允许程序中的不同部分(比如对象、类或模块)在发生某些特定情况时互相通信或协作。事件驱…...
node_exporter
目录 指标详解常用指标 指标详解 指标描述node_arp_entriesARP(Address Resolution Protocol)表中的条目数量,用于将IP地址映射到MAC地址。node_boot_time_seconds系统启动时间的Unix时间戳,表示从1970年1月1日以来的秒数。node…...
近期在看
1. C Primer 2. 深入理解 FFmpeg 3. 鸿蒙 sdk 开发...
C++篇:C++入门基础(1)
C前言: C 的发展历史可以追溯到1979年,当时C语言以其效率和灵活性成为广泛使用的系统编程语言,但它也有一些限制,例如缺乏直接支持面向对象编程(OOP)的特性。 之后Bjarne Stroustrup(也就是C之父)是C的创始…...
【Linux】网络编程_3
文章目录 十、网络基础5. socket编程socket 常见APIsockaddr结构简单的UDP网络程序 未完待续 十、网络基础 5. socket编程 socket 常见API // 创建 socket 文件描述符 (TCP/UDP, 客户端 服务器) int socket(int domain, int type, int protocol);// 绑定端口号 (TCP/UDP, 服…...
Kafka设计与原理详解
RocketMQ 是一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。同时,广泛应用于多个领域,包括异步通信解耦、企业解决方案、金融支付、电信、电子商务、快递物流、广告营销、社交、即…...
IPV6公网暴露下的OPENWRT防火墙安全设置(只允许访问局域网中指定服务器指定端口其余拒绝)
首先是防火墙的常规配置和区域配置 标的有点乱但是选项含义都做了解释,看不懂可以直接按图抄作业。 其次是对需要访问的端口做访问放通 情况1 DDNS位于openwrt网关上,外网访问openwrt,通过端口转发访问内部服务器。此情况需要设置端口转发。 …...
单调栈② | Java | LeetCode 接雨水 最大的矩形
42. 接雨水 暴力法 for循环遍历每一个柱子,内层for循环找到左边和右边比它高的柱子 时间复杂度 n^2 优化:添加一个预处理 定义一个数组,存放该柱子右边比他高的柱子是哪一个 再用一个数组,存放该柱子左边比他高的柱子是哪一个 …...
2024年全国青少年信息素养大赛总决赛日赛程表
2024全国青少年信息素养大赛赛程表分赛场(浙江传媒学院桐乡校区、桐乡技师学院)日期地点时间赛项16日传媒学院8:00-9:00检录 9:00-10:30开赛图形化编程挑战赛(小学1-3年级)A组12:00-13:00检录 13:00-14:30开赛图形化编程挑战赛&am…...
PHP:连接钉钉接口-钉钉回调事件,本地测试数据
前置数据参考 数据说明:参见官方文档回调事件消息体加解密 - 钉钉开放平台 (dingtalk.com) URL后面带的参数: signature5a65ceeef9aab2d149439f82dc191dd6c5cbe2c0×tamp1445827045067&noncenEXhMP4r Post参数: { &quo…...
【C++标准模版库】vector的介绍及使用
vector 一.vector的介绍二.vector的使用1.vector 构造函数2.vector 空间增长3.vector 增删查改4.vector 迭代器的使用1.正向迭代器2.反向迭代器 5.victor 迭代器失效问题(重点) 三.vector不支持 流提取与流插入四.vector存储自定义类型1.存储string2.存储…...
数说故事|引爆社媒的森贝儿IP,品牌如何实现流量变现?
以可爱、雅痞、贱萌......的外表加魔性舞姿出圈的可爱小狗——森贝儿贵宾犬Milo,用“可爱微怒”的表情演绎着当代打工人的“疯态”,并迅速晋升成不少打工人高频使用的表情包。 最近几年,“萌系”爆款IP频出,用小动物的形象、可爱…...
使用openpyxl库对Excel条件格式的深度探索
哈喽,大家好,我是木头左! openpyxl中的条件格式 在openpyxl中,可以使用ConditionalFormatting类来创建和管理条件格式。这个类有两个主要的方法:add_conditional_formatting()和remove_conditional_formatting(),分别用于添加和删除条件格式。 add_conditional_formatt…...
原生javascript中的ajax通信技术
AJAX(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。也就是实现前后端交互的功能。以下是使用AJAX的基本步骤和代码演示: 1.创建一个XMLHttpRequest对象: var xhr…...
SpringBoot Vue用自签名证书SSL配置https,http转发到https(整理文章)
要配置https地址访问,需要向服务器商申请和使用SSL证书。由于是测试阶段,我们自己创建SSL证书,叫作自签名证书。 1.创建自签名证书 Vue前端生成自签名证书我们用openssl 参考文章一 参考文章二SpringBoot后端生成自签名证书用JDK自带的keyt…...
嵌入式人工智能(41-基于树莓派4B的串口蓝牙模块AT09-cc2541)
1、串口蓝牙模块AT-09 AT-09是一种串口蓝牙模块,可实现串口与蓝牙之间的数据传输。AT-09模块基于蓝牙4.0技术,具有低功耗、高传输速率和广泛的应用范围。 AT-09模块支持AT指令,通过串口与外部设备进行通信。用户可以使用AT指令对模块进行配…...
C++ 动态规划
子序列子串相关 单个指一个数组或字符串,两个指两个数组或字符串。 最长上升子序列-单个 dp[i]:以下标i为结尾的递增的最长子序列长度。 位置i的最长升序子序列等于j从0到i-1各个位置的最长升序子序列 1 的最大值。 class Solution { public:int l…...
回溯问题总结
一、子集问题 模板问题 给定一个序列[1,n],求这个序列的所有子集 输入描述: 一个正整数n(1 < n < 12) 输出描述: 每个子集一行,输出所有子集。 输出顺序为: (1)元素个数少的子集优先输出;…...
GraphRAG如何使用ollama提供的llm model 和Embedding model服务构建本地知识库
使用GraphRAG踩坑无数 在GraphRAG的使用过程中将需要踩的坑都踩了一遍(不得不吐槽下,官方代码有很多遗留问题,他们自己也承认工作重心在算法的优化而不是各种模型和框架的兼容性适配性上),经过了大量的查阅各种资料以…...
.net # 检查 带有pdf xss
1.解决pdf含javasprct脚本动作,这里是验证pdf内部事件。相关pdf文件下载: 测试pdf文件 相关包 iTextSharp 5.5.13.4 iTextSharp using iTextSharp.text.pdf; using iTextSharp.text.pdf.parser;private Boolean IsPdfSafe(Stream stream){// PdfReader…...
huntt wordpress主题/重庆seo服务
题目连接 用固定面额的货币拼指定的钱数,这道题挺面熟的。嗯。。。想起了18年提高组的货币系统 这一类题乍看挺难的,第一反应是个搜索,枚举所有的排列情况,并记录最小的结果。但是这样的暴力搜索复杂度爆炸,很大可能会…...
做网站的软件dw/免费建网站
PPP-C#conf tPPP-C(config)#vpdn enable //启用路由器的虚拟专用拨号网络---***d 由于ADSL的PPPoE应用是通过虚拟拨号来实现的所以在路由器中需要使用VPDN的功能PPP-C(config)#int e1/0 // 路由器内网接口PPP-C(config-if)#no shutPPP-C(config-if)#i…...
公司网站维护流程/互联网广告代理可靠吗
已同步到个人博客,欢迎访问。 如果使用了Webpack进行了文件的组织、编译,就可以使用require.context令组件实现自动化注册。 这个过程需要在创建Vue实例之前(new Vue({}))之前完成,例如src/main.js require.context …...
陆丰网站建设/百度收录时间
查看当前在那哪个数据库中 select database()修改 Student 表 AGE属性为 INT类型 可以是NULL ALTER TABLE Student MODIFY COLUMN AGE INT NULL添加一个新列(新字段) ALTER TABLE Student ADD NEWCOLUMN CHAR(10) NULL删除一列 (一个字段&…...
外发加工网线是真的吗/seo优化工具哪个好
yum (yellow dog)网络yum ftp http nfs以ftp为例:#mount /dev/cdrom /mnt/cdrom (如果这目录没建需要自己建)#cd /mnt/cdrom/Server/#rpm -ivh vsftpd-2.0.5-16.el5.i386.rpm (安装ftp服务器)#service vsftpd start (启动ftp服务&…...
微网站免费建站系统/互联网广告投放代理公司
使用RD Client来远程桌面 可能你会觉得奇怪,team viewer和向日葵之类的难道不香吗?看起来他们两个都是实现了远程桌面的功能,好像没必要特地用Windows自带的RD Client进行内网穿透之后远程桌面。 实际上team viewer之类的在我的使用范围内不…...