代码随想录算法训练营Day30

力扣452.用最少数量的箭引爆气球【medium】
力扣435.无重叠区间【medium】
力扣763.划分字母区间【medium】
力扣56.合并区间【medium】

一、力扣452.用最少数量的箭引爆气球【medium】

题目链接:力扣452.用最少数量的箭引爆气球
在这里插入图片描述
视频链接:代码随想录
题解链接:灵茶山艾府

1、思路

  • 在这里插入图片描述
  • 对区间的右端点进行升序排序
  • 初始化 ans = 0, pre = -inf
  • 如果 start <= pre:说明这个区间已经有箭,跳过
  • 如果 start > pre:说明没有被覆盖住,更新 pre = endans += 1
  • 时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn)

2、代码

class Solution:def findMinArrowShots(self, points: List[List[int]]) -> int:points.sort(key= lambda x:x[1])ans = 0pre = -inffor start,end in points:if start > pre:ans += 1pre = endreturn ans

二、力扣435.无重叠区间【medium】

题目链接:力扣435.无重叠区间
在这里插入图片描述

视频链接:代码随想录
题解链接:灵茶山艾府

1、思路

  • 求移除最少区间使得剩下的区间之间互不重叠 等价于 选出最多区间使得这些区间互不重叠
  • 怎样才可以多呢?我们选出右端点最小的作为第一个区间A,这样相当于为后面预留出更多的位置存放区间,这就是贪心的地方
  • 选出第一个后,我们也划去了和A有相交部分的区间,从剩下的区间中再选出最小的右端点
  • 所以我们的步骤是
    • 将区间的右端点升序排序
    • 初始化 ans = 0, pre_r = -inf
    • 当碰到区间的左端点 >= 上一个区间的右端点的时候,说明碰到了第一个不相交的了,这就是我们下一个要选的区间, ans += 1 , pre_r = right ,更新区间数ans和右端点的位置
    • 最后的答案用区间长度减一下
  • 时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn)

2、代码

class Solution:def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:intervals.sort(key = lambda x: x[1])ans = 0pre_r = -inffor left, right in intervals:if left >= pre_r:ans += 1pre_r = rightreturn len(intervals) - ans

三、力扣763.划分字母区间【medium】

题目链接:力扣763.划分字母区间
在这里插入图片描述
视频链接:代码随想录
题解链接:灵茶山艾府

1、思路

  • 利用字典键的唯一性,确保最终每个字符对应的下标是最后一次出现的位置
  • 初始化答案 ans = [ ], start = end = 0
  • 记录第一个字母在字符串中最后一次出现的位置更新为end
  • 通过for循环遍历,不断延拓更新end【通过比较当前的endlast(c)】,直到 end == i,说明可以切割了,这就是最早可以切割的地方,即贪心的地方
  • 那么 i + 1 就是新的start
  • 同时记录下刚刚切割的片段长度
  • 时间复杂度: O ( 2 n ) O(2n) O(2n)

2、代码

class Solution:def partitionLabels(self, s: str) -> List[int]:last = {c: i for i,c in enumerate(s)} # 每个字母最后出现的下标ans = []start = end = 0for i,c in enumerate(s):end = max(end, last[c]) # 更新当前区间右端点的最大值if end == i: # 当前区间合并完毕ans.append(end - start + 1)start = i + 1  # 下一个区间的左端点return ans

3、代码问题

  • {key_expression: value_expression for item in iterable}
  • 在这里插入图片描述

四、力扣56.合并区间【medium】

题目链接:力扣56.合并区间
在这里插入图片描述
题解链接:灵茶山艾府

1、思路

  • 对区间左端点进行升序排序
  • 初始化答案 ans = [ ]
  • 判断什么时候可以合并?
  • 当遍历区间的左端点在处理区间的右端点左端,即有相交,即可以合并
    • 合并后还要更新新的右区间
    • 怎么表示这个处理区间的右端点呢?即ans[-1][1]!这个表示太巧妙了!我本来是想引进两个新的变量表示
  • 否则,不可以合并,将其作为新的处理区间
    • 即添加到答案中
  • 时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn)

2、代码

class Solution:def merge(self, intervals: List[List[int]]) -> List[List[int]]:intervals.sort(key = lambda x:x[0])ans = []for p in intervals:if ans and p[0] <= ans[-1][1]: # 可以合并ans[-1][1] = max(ans[-1][1], p[1]) # 更新右端点最大值else: # 不相交,无法合并ans.append(p) # 新的合并区间return ans

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

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

相关文章

Swift —— delegate 设计模式

一、什么是 delegate 模式 所谓 delegate 就是代理模式。简单来说&#xff0c;delegate 模式就是在类的函数里运行完一段代码后&#xff0c;你可以通过一个符合某个代理协议的属性来调代理的方法。其中&#xff0c;代理方法就是回调函数。 二、delegate 模式与闭包比的优势 …

linux-vi和文件操作

在 Linux 系统的世界里&#xff0c;有一个核心思想贯穿始终&#xff0c;那就是 “万物都是文件”。这一理念极大地简化了系统资源的管理和操作&#xff0c;为用户和开发者提供了统一且高效的交互方式。本文将深入探讨这一理念在 Linux 文件系统中的具体体现&#xff0c;从硬盘分…

Endnote 21显示字段设置与修改详细解析(附Endnote Click)

目录 前言字段设置与详细解释Endnote Click1. 安装 Endnote Click2. 一键获取Edge插件3. 安装完成启动插件4. 检索期刊文献案例5. 在 Endnote Click 我的locker中导入文献 前言 在学术研究的漫漫征途中&#xff0c;高效管理参考文献是每位学者、学生都绕不开的关键环节。Endno…

java使用 ​Stream 流对自定义对象数组去重的

在 Java 中&#xff0c;使用 Stream 流对自定义对象数组去重的核心是确保对象能正确判断“重复”的逻辑。以下是具体实现方法及场景分析&#xff1a; 方法 1&#xff1a;直接使用 distinct()&#xff08;需重写 equals 和 hashCode&#xff09; 若自定义对象已正确重写 equals…

C++ (类的设计,对象的创建,this指针,构造函数)

类的设计 C对结构体是有增强的 可以包含函数作为结构体成员 可以直接定义变量 在结构体成员函数里面可以直接访问结构体成员变量 struct student{string name;int age;float score;void play_game(const string &name);}void student::play_game(const string game){}…

《ADVANCING MATHEMATICAL REASONING IN LAN- GUAGE MODELS》全文阅读

《ADVANCING MATHEMATICAL REASONING IN LAN- GUAGE MODELS: THE IMPACT OF PROBLEM-SOLVING DATA, DATA SYNTHESIS METHODS, AND TRAINING STAGES》全文阅读 提升语言模型中的数学推理能力&#xff1a;问题求解数据、数据合成方法及训练阶段的影响 \begin{abstract} 数学推…

网络测试工具:涵盖网络测速、密码查看、故障判断与网络监测

在网络管理与维护的广阔领域中&#xff0c;网络测试工具扮演着至关重要的角色。它们不仅简化了复杂的网络诊断流程&#xff0c;还提升了工作效率。今天推荐一款包含功能全面的网络测试工具&#xff1a;InetTest&#xff0c;是一款免费且开源的网络测试工具&#xff0c;适用于Wi…

小刚说C语言刷题——1005 - 已知一个圆的半径,求解该圆的面积和周长

1.题目描述 已知一个圆的半径&#xff0c;求解该圆的面积和周长。 输入 输入只有一行&#xff0c;只有 1个整数。 输出 输出只有两行&#xff0c;一行面积&#xff0c;一行周长。&#xff08;保留两位小数&#xff09;。 令 pi3.1415926。 样例 输入 1 输出 3.14 6.…

【算法】快速排序

算法系列六&#xff1a;快速排序 一、快速排序的递归探寻 1.思路 2.书写 3.搭建 3.1设计过掉不符情况&#xff08;在最底层时&#xff09; 3.2查验能实现基础结果&#xff08;在最底层往上点时&#xff09; 3.3跳转结果继续往上回搭 4.实质 二、快速排序里的基准排序 …

SoapUI 4.6.4(32位)下载安装教程 - 兼容老旧Windows系统

SoapUI 4.6.4&#xff08;32位版&#xff09; 是个老版本的测试工具&#xff0c;专门给 32位 Windows 电脑 用的。现在最新版都是 64 位的了&#xff0c;但如果你还在用老系统&#xff0c;可能还得找这个旧版。 SoapUI 4.6.4工具下载:https://pan.quark.cn/s/c07381db8102 这…

【AI量化第24篇】KhQuant 策略框架深度解析:让策略开发回归本质——基于miniQMT的量化交易回测系统开发实记

我是Mr.看海&#xff0c;我在尝试用信号处理的知识积累和思考方式做量化交易&#xff0c;应用深度学习和AI实现股票自动交易&#xff0c;目的是实现财务自由~ 目前我正在开发基于miniQMT的量化交易系统——看海量化交易系统。 本篇要讲到量化的核心了——策略。说白了每个投资者…

Java面试黄金宝典48

1. C++ 的拷贝构造函数,深拷贝和浅拷贝 定义 拷贝构造函数:在 C++ 里,拷贝构造函数属于特殊的构造函数,其功能是使用一个已存在的对象来初始化一个新对象。当对象以值传递的方式作为参数传给函数、函数返回对象、用一个对象初始化另一个对象时,拷贝构造函数会被调用。浅拷…

OpenCV学习之获取图像所有点的坐标位置(二)

1.功能介绍 (1)使用openCV解析了.jpeg、.jpg、.png格式的图像文件,输出了图像的宽、高、通道数; (2)创建txt格式文件,保存图像中各像素点的rgba值。 2.环境介绍 操作系统:window10 开发语言:visual studio 2015 c++ 3.功能实现过程 3.1环境设置 (1)打开Vs2015…

B2B2C多用户商城平台 的两种创新玩法

以前随便搞个淘宝京东那样的商城就能躺着赚钱的日子早过去了&#xff01;现在市面上各种电商玩法花样百出&#xff1a;小红书那种刷着刷着就下单的"种草"电商&#xff0c;拼多多那种"帮我砍一刀"的社交电商&#xff0c;还有抖音快手那种看着视频突然就想买…

【Bluedroid】A2DP Sink播放流程源码分析(二)

接上一篇继续分析&#xff1a;【Bluedroid】A2DP Sink播放流程源码分析(一)_安卓a2dp sink播放流程-CSDN博客 AVDTP接收端&#xff08;Sink&#xff09;流事件处理 bta_av_sink_data_cback 是 Bluedroid 中 A2DP Sink 角色的 AVDTP 数据回调函数&#xff0c;负责处理接收端的…

抗量子算法验证工具

抗量子算法计算工具 抗量子算法验证工具ML-KEMML-DSASLH-DSA 抗量子算法验证工具 2024年末&#xff0c;美国NIST陆续公布了FIPS-203、FIPS-204、FIPS-205算法标准文档&#xff0c;抽空学习了一下&#xff0c;做了个算法计算工具。 ML-KEM ML-DSA SLH-DSA 需要的朋友可留言交流…

2025年PMP考试有哪些变化?难点在哪里?

PMP&#xff08;项目管理专业人士资格认证&#xff09;考试因其广泛的行业认可度和实用性&#xff0c;成为许多专业人士提升职业竞争力的重要选择。然而&#xff0c;对于初次接触PMP考试的考生来说&#xff0c;其广度与深度的平衡、理论与实践的结合&#xff0c;以及跨文化思维…

Docker学习笔记-docker安装、删除

一、在centOS 7中docker的默认安装目录 # Docker 主配置文件目录 ls /etc/docker# Docker 数据目录&#xff08;镜像、容器、卷等&#xff09; ls /var/lib/docker# Docker 可执行文件路径 which docker # 输出类似 /usr/bin/docker 二、docker文件目录说明 目录/文件用途/…

MATLAB求和∑怎么用?

MATLAB求和∑怎么用&#xff1f; 一&#xff1a;题目&#xff1a;求下列方程的和 二、代码如下 1.syms函数 &#xff08;方法一) 代码如下&#xff08;示例&#xff09;&#xff1a; 1. syms x 2. symsum((x.^22*x).^3,1,100) 3. 2.直接用循环 (方法二) 代码如下&am…

每日算法-链表(2.两数相加、24.两两交换链表中的节点、143.重排链表)

一.两数相加 1.1题目描述 1.2题解思路 定义两个指针l1,l2依次遍历两个链表&#xff0c;用变量add存储l1加l2的值&#xff0c;将add的个位数取出来充当新节点的值&#xff0c;然后将add的个位数删去&#xff0c;即add /10&#xff0c;循环此操作。 重点分析&#xff1a; 1.跟…