今日总结

用最少数量的箭引爆气球

题目链接:452. 用最少数量的箭引爆气球 - 力扣(LeetCode)

代码随想录

整体思路:

        1、统一度量 :

                将所有区间按照左端点进行排序:

                        用到了二维的sort,在类中需要定义静态成员函数cmp,从小到大排列

        2、进行区间合并

                (1)如果没有气球,就是0箭

                (2)如果有气球,至少1箭

                (3)按照排序从小到大遍历,比较当前位置的左端点是否在前边位置的范围内(<=前边位置的最小右端点)

                        如果在,就不加箭,只更新最小的右端点(前边的最小右与当前的右 比较取最小)

                        如果不在,就加箭,更新右端点为当前气球的右端点

整体代码:

class Solution {
public:static bool cmp(const vector<int>&a,vector<int>&b){if(a[0]<b[0])return true;else return false;}int findMinArrowShots(vector<vector<int>>& points) {//进行排序:按照起始坐标排序://在类中,两个维度,使用sort需要自己定义静态比较函数cmpsort(points.begin(),points.end(),cmp);//进行比较://1、如果没有气球就是0支箭if(points.size()==0)return 0;//2、要是有气球至少一支箭int sum =1;//定义右边端点位置int res = points[0][1];//有气球需要判断后边的箭的起点是不是在前边的范围的之内,在就不需要加箭,更新右边的端点位置为最小 for(int i=1;i<points.size();i++){if(points[i][0]<=res){//不加箭,只更新右端点res = min(res,points[i][1]);}else{//超过了右端点,//加一支箭sum ++;//更新右端点res = points[i][1];}}return sum;}
};

无重叠区间

题目链接:435. 无重叠区间 - 力扣(LeetCode)

代码随想录

整体思路:

        1、统一度量:

                将所有的区间按照第一个维度从小到大排列,如果第一个维度相同,按照第二维度小的排在前边(第二维度大的一定是一个舍掉的区间)

        2、进行区间遍历,舍弃重叠区间

                如果当前区间的左端点在上一个区间的范围内(小于右端点,没有等)说明这两个区间重叠了:所以舍弃数量+1,更新右端点为小的右端点,相当于舍掉了右端点大的区间

                如果当前区间的左端点不在上一个区间的范围内,说明没有重叠,舍弃数量不变,更新右端点为当前区间的右端点

整体代码:

class Solution {
public://移除最小数量的区间,所以区间所占位置越小越好://[1,3],[2,3]这种,舍掉[1,3],因为战空间大, 可能存在[0,2]//1、对所有区间,按照第一维度进行从小到大排序,第一维度相同,排列第二维度小的在前边(大的一定是舍弃的)//2、从左到右进行遍历,如果当前的区间的左端点在前一个区间内,说明重叠了,比较两者的右端点,谁的右端点小,要谁,舍弃数量+1//如果当前区间的左端点不在前一个区间内,说明没有重叠,记录右端点位置便于下一个区间的比较,舍弃数量不变//定义sort的静态比较函数static bool cmp(const vector<int>&a,const vector<int>&b){if(a[0]<b[0])//比较第一维度return true;else if(a[0]<=b[0]){if(a[1]<b[1])return true;else return false;}else return false;}int eraseOverlapIntervals(vector<vector<int>>& intervals) {//排序sort(intervals.begin(),intervals.end(),cmp);//如果没有区间if(intervals.size()==0)return 0;//如果有区间int rm =0;//如果只有一个区间,不需要舍弃//定义第一个区间的右端点 ,便于后边进行比较int right_point = intervals[0][1];//遍历,从第二个区间开始for(int i=1;i<intervals.size();i++){//判断当前区间的起点是否在上一个区间中,注意如果在在一个点上是不重叠的,所以没有等号if(intervals[i][0]<right_point){//此时说明当前区间与上一个区间有重叠,需要舍弃加1,同时更新小的右区间,相当于删掉了右端点大的区间rm ++;right_point = min(right_point,intervals[i][1]);}//如果没有重叠else{//不需要舍弃区间,rm不变化//更新右端点为当前区间的右端点right_point = intervals[i][1];}}return rm;}
};

划分字母区间

题目链接:763. 划分字母区间 - 力扣(LeetCode)

代码随想录

整体思路:

unordered_map记录:

        1、插入元素可以使用insert、下标操作符[]赋值

                (1)insert插入限制:

                        mmap.insert({1,2})如果键1不存在插入{1,2};但是键 1存在就不会重复插入了

                (2)[]插入

                        mmap[1]=2,如果键1不存在,就插入{1,2}如果键1存在,就更新键1的value为2

        2、不能先判断是否到了长度lengthh,再进行没有到达长度时加当前段的长度,因为会出现第一个坐标0时,本身就是一段 ,此时却不能进行额外判断

                需要先将当前位置加入之后,再判断当前位置是不是符合写入要求

        3、使用unordered_map进行记录每个元素的最远位置,之后通过判断当前元素是不是有更远的位置,更新最远的位置,当到达最远位置时进行记录,并将距离恢复为0

整体代码:
 

class Solution {
public://最大的困难在于同一个字母必须出现在同一个片段中,这会导致分段一定是唯一解//所以需要统计每个字母最后出现的位置,只要在这个区间中,没有其他字母最后出现的位置大于这个字母的最后位置,就可以将这个字母的最后位置当作分段点vector<int> partitionLabels(string s) {//1、统计所有字母的最后出现位置为一个数组,使用unordered_map进行记录iunordered_map <char,int> mmap;for(int i=0;i<s.size();i++){mmap[s[i]] = i;}//2、遍历所有元素,记录当前区间的最远出现位置,判断在这个位置范围内是否存在更远的位置int lengthh =0;//记录当前的段的大小int vec=0;//记录总的分段情况vector<int>res;if(s.size()==0)return {0};for(int i=0;i<s.size();i++){//如果当前没有到达最远的位置,就判断当前需不需要更新最远位置lengthh = max(mmap[s[i]],lengthh);//同时当前段的大小+1vec++;//判断当前是否到了最远位置if(i==lengthh){//到了最远位置,记录res.push_back(vec);vec =0;//更新距离为0,进行下一个元素}}return  res;}
};

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

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

相关文章

最新版的electron通信规则

介绍: 以前electron require(electron/remote).fs 就能调用node中的各种api,最新版可能为了安全考虑,除了主main.js入口文件以外,其他的地方都不能调用node中的api,比如里面的各种函数,如fs,path等。这节课来教大家最新版本的electron如何进行通信。 结构: 了解通信之前…

Python爬虫实战:研究PyPLN库相关技术

1. 引言 随着全球化的发展,葡萄牙语作为世界第六大语言,其在互联网上的文本数据量不断增长。如何从海量的葡萄牙语文本中提取有价值的信息,成为自然语言处理领域的重要研究方向。 PyPLN (Python Natural Language Processing Toolkit) 是一个专门针对葡萄牙语设计的自然语言…

层次分析法代码笔记

层次分析法 一、核心 在层次分析法中&#xff0c;通过 算术平均法、几何平均法、特征值法 计算指标权重&#xff0c;再通过 一致性检验 确保判断矩阵逻辑合理&#xff0c;为多准则决策提供量化依据。 二、代码 &#xff08;一&#xff09;一致性检验&#xff08;判断矩阵合理性…

[精选] 2025最新生成 SSH 密钥和 SSL 证书的标准流程(Linux/macOS/Windows系统服务器通用方案)

[精选] 2025最新生成 SSH 密钥和 SSL 证书的标准流程&#xff08;Linux/macOS/Windows系统服务器通用方案&#xff09; 在现代网络中&#xff0c;SSH&#xff08;安全外壳协议&#xff09;和 SSL&#xff08;安全套接层协议&#xff09;是保证数据传输安全和身份验证的重要技术…

开发框架安全ThinkPHPLaravelSpringBootStruts2SpringCloud复现

PHP-ThinkphpLaravelThinkPHP是一套开源的、基于PHP的轻量级Web应用开发框架综合工具&#xff1a;武器库-Thinkphp专检&#xff08;3-6版本&#xff09;如何判断是TP6框架开发的web程序&#xff0c;基于源码、路径、图标、基于报错可发现dex.php?xxx 在其6.0.13版本及以前/?c…

uniapp+vue3小程序点击保存图片、保存二维码

介绍 步骤1:引入必要的API 在script部分,确保引入了uni的相关API,如uni.downloadFile和uni.saveImageToPhotosAlbum。 步骤2:下载图片到本地 在toInvite函数中,使用uni.downloadFile将图片下载到本地,并获取本地路径。 步骤3:处理权限和保存逻辑 在saveToAlbum函数…

Golang中GROM多表关联跟原生SQL多表关联区别

文章目录前言一、GROM多表关联二、原生Sql多表关联前言 对比GROM多表关联和原生Sql多表关联 一、GROM多表关联 适用于返回全部数据需要逻辑外键&#xff08;不会在数据库创建任何约束&#xff09;适合三个表以下的关联有几张表就会查询几次 type Product struct {gorm.Model …

设计模式六:工厂模式(Factory Pattern)

概念定义一个创建对象的接口&#xff0c;但让子类决定实例化哪个类。实现示例#include <iostream> #include <memory>// 产品基类 class Product { public:virtual void use() 0;virtual ~Product() default; };// 具体产品A class ConcreteProductA : public Pr…

应用层自定义协议【序列化+反序列化】

文章目录再谈 “协议”重新理解read、write、recv、send和tcp为什么支持全双工Server.cc网络版计算机实现Socket封装&#xff08;模板方法类&#xff09;socket.hpp定制协议JsonJson安装定义一个期望的报文格式Protocol.hppParser.hppCalculator.hpp完整的处理过程Client.cc三层…

dify创建OCR工作流

实现ocr识别文件内容&#xff0c;引用dify的一个插件&#xff0c;插件名称&#xff1a;mineru 引用在线版本mineru 具体操作说明&#xff0c;参见视频&#xff1a; 第六篇&#xff1a;DifyOCR&#xff0c;扫描件最优解_哔哩哔哩_bilibili 引用本地部署mineru 上面的这种使用…

备受关注的“Facebook Email Scraper”如何操作?

Facebook Email Scraper&#xff08;脸书邮箱提取工具&#xff09;是一类用于从Facebook平台提取公开邮箱信息的工具&#xff0c;其核心功能是通过解析用户主页、群组、页面等公开内容&#xff0c;识别并提取其中包含的邮箱地址&#xff0c;为用户提供结构化的联系方式数据。这…

【网络原理】万字长文解密UDP/TCP——手把手教你理解网络通信

目录 1.前言 2.正文 2.1UDP协议 2.1.1UDP协议端格式 2.1.2UDP的特点 2.1.3理解UDP的“不可靠” 2.1.4面向数据报 2.1.5基于UDP的应用层协议 2.2TCP协议 2.2.1TCP协议端格式 2.2.2TCP十个核心机制 2.2.2.1确认应答 2.2.2.2超时重传 确认应答超时重传 vs 三次握手 …

MATLAB软件使用频繁,企业如何做到“少买多用”?

在制造企业的工程计算、算法研发、系统建模等场景中&#xff0c;MATLAB 已成为不可或缺的核心工具。 无论是动力学建模、控制算法开发&#xff0c;还是信号处理和数据可视化&#xff0c;MATLAB 的高频使用场景覆盖了从研发部门到测试部门的多个岗位。然而&#xff0c;企业 IT 负…

数据结构自学Day13 -- 快速排序--“分而治之”

&#x1f536; 一、快速排序&#xff08;Quick Sort&#xff09;&#x1f4cc; 基本思想&#xff1a;分而治之&#xff1a;每次从数组中选一个“基准”&#xff08;pivot&#xff09;&#xff0c;把比它小的放左边&#xff0c;大的放右边。对左右子数组递归排序。&#x1f9e0;…

Linux 进程与服务管理~进程基础、进程查看、进程控制、服务管理、开机启动​​

在 Linux 系统中,进程与服务管理是运维和开发的核心技能之一。进程是程序运行的实例,服务是长期运行的后台进程(守护进程)。掌握进程与服务的管理方法,能有效排查系统问题、优化资源使用。以下从 ​​进程基础、进程查看、进程控制、服务管理、开机启动​​ 五大模块详细讲…

论文笔记 | Beyond Pick-and-Place: Tackling Robotic Stacking of Diverse Shapes

论文地址&#xff1a;Beyond Pick-and-Place: Tackling Robotic Stacking of Diverse Shapes 概述&#xff1a;本文提出 RGB-Stacking 基准测试&#xff0c;研究如何仅凭 RGB 摄像头视觉和本体感知&#xff0c;实现机器人对 复杂几何物体的高效堆叠。通过结合仿真专家训练、交互…

React 英语打地鼠游戏——一个寓教于乐的英语学习游戏

&#x1f3af; 英语打地鼠游戏 一个寓教于乐的英语学习游戏&#xff0c;通过经典的打地鼠玩法帮助用户学习英语单词。 ✨ 项目特色 &#x1f3ae; 游戏化学习 经典打地鼠玩法&#xff1a;6 个洞穴&#xff0c;听英文选单词即时反馈&#xff1a;答对/答错立即语音提示计分系…

Qt--Widget类对象的构造函数分析

Widget类对象的构造函数分析&#xff0c;用更直观的方式解释这段代码的作用和工作原理&#xff1a;代码&#xff1a;Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }代码解析 Widget::Widget(QWidget *parent) // 构造函数定…

使用pytorch创建模型时,nn.BatchNorm1d(128)的作用是什么?

在PyTorch中&#xff0c;nn.BatchNorm1d(128) 的作用是对 一维输入数据&#xff08;如全连接层的输出或时间序列数据&#xff09;进行批标准化&#xff08;Batch Normalization&#xff09;&#xff0c;具体功能与实现原理如下&#xff1a; 1. 核心作用 标准话数据分布 对每个批…

【数据结构】二叉树的链式结构--用C语言实现

1.二叉树的链式结构 此前&#xff0c;我们通过数组&#xff08;顺序表&#xff09;完成了二叉树的顺序存储&#xff0c;并实现了二叉树的基础功能 那么&#xff0c;二叉树还有没有其他存储方式呢&#xff1f; 前面我们学习了链表&#xff0c;它是一种线性结构&#xff0c;而二…