【算法训练记录——Day36】

Day36——贪心Ⅳ

  • 1.leetcode_452用最少数量的箭引爆气球
  • 2.leetcode_435无重叠区间
  • 3.leetcode_763划分字母区间
  • 4.leetcode_

1.leetcode_452用最少数量的箭引爆气球

在这里插入图片描述
思路:看了眼题解,局部最优:当气球出现重叠,一起射,所用弓箭最少。全局最优:把所有气球射爆所用弓箭最少。如果真实的模拟射气球的过程,应该射一个,气球数组就remove一个元素,这样最直观,毕竟气球被射了。

但仔细思考一下就发现:如果把气球排序之后,从前到后遍历气球,被射过的气球仅仅跳过就行了,没有必要让气球数组remove气球,只要记录一下箭的数量就可以了。

	int findMinArrowShots(vector<vector<int>>& points) {int res = 1;sort(points.begin(), points.end());int preRight(points[0][1]);// for(auto i : points) {//     cout << i[0] << " " << i[1] << endl;// }// cout << "==========" << endl;for(int i = 1; i < points.size(); i++) {// cout << i << " " << preRight << endl;if(preRight < points[i][0]) {res++;preRight = points[i][1];} else {preRight = min(preRight, points[i][1]);}}return res;}

主要思路是每次都维护当前交集最小的边界,因为已经拍过序了。如果不相交,res++,然后更新当前位置能覆盖的最大边界,如果相交,就更新最小边界。和题解解法差不多

2.leetcode_435无重叠区间

在这里插入图片描述
思路:
怎么看是否重叠?同样还是排序,看是否相交(left > right)
2. 有重叠移除哪个?移除右边界大的那个

	static bool cmp(const vector<int>& v1, const vector<int>& v2) {if(v1[0] == v2[0]) return v1[1] < v2[1];return v1[0] < v2[0];}
public:int eraseOverlapIntervals(vector<vector<int>>& intervals) {sort(intervals.begin(), intervals.end(), cmp);// for(auto i : intervals)//     cout << i[0] << " " << i[1] << endl;int res = 0;int preRight = intervals[0][1];for(int i = 1; i < intervals.size(); i++) {if(intervals[i][0] < preRight) {preRight = min(preRight, intervals[i][1]); // 有重叠移除大边界res++;} else {preRight = intervals[i][1]; // 无重叠更新边界}}return res;}

看了眼题解,思路差不多,我这里选用左边界排序

3.leetcode_763划分字母区间

在这里插入图片描述
思路:整体思路和前两题差不多,区别在于,需要做转换。将同一字母划分在同一片段,遍历一次数组,保存字母出现的开始位置和结束位置,记录首字母位置信息,对保存的字母位置信息进行排序(排序是为了让开始位置连续,以便记录交集),若pre 和 cur 不相交,将之前的位置信息加入res中,更新新的左边界和右边界;相交,则更新边界

	static bool cmp(const vector<int>& v1, const vector<int>& v2) {if(v1[0] == v2[0]) return v1[1] < v2[1];return v1[0] < v2[0];}
public:vector<int> partitionLabels(string s) {vector<vector<int>> dp = {26, vector<int>{0, 0}};for(int i = 0; i < s.size(); i++) {int index = s[i]-'a';if(dp[index][0] == dp[index][1]) {dp[index][0] = i + 1;} else {dp[index][1] = i + 1;}}int preLeft = dp[s[0]-'a'][0];int preRight = dp[s[0]-'a'][1];sort(dp.begin(), dp.end(), cmp);vector<int> res;if(preRight == 0) preRight = preLeft;for(int i = 1; i < 26; i++) {if(dp[i][0] != 0) {if(dp[i][1] == 0) dp[i][1] = dp[i][0];// cout << (char)('a' + i) << " " << dp[i][0] << " " << dp[i][1] << endl;if(preRight >= dp[i][0]) {preRight = max(preRight, dp[i][1]);} else {// cout << "  " << preRight << " " << preLeft << endl;res.push_back(preRight - preLeft + 1);preLeft = dp[i][0];preRight = dp[i][1];}}}res.push_back(preRight - preLeft + 1);return res;}

看了下题解,还有另一种方法:
每一个字母都有其最远出现位置,如果在一个区间内,当前位置等于所有字母最远出现位置,那么说明到达了分界点,即可写出如下代码

	vector<int> partitionLabels(string s) {vector<int> res;int hash[26] = {0};for(int i = 0; i < s.size(); i++) {// hash[s[i]-'a'] = max(hash[s[i]-'a'], i);hash[s[i]-'a'] = i; // 记录最远位置}int right = 0; // 记录当前区间最远位置int left = 0;for(int i = 0; i < s.size(); i++) {right = max(right, hash[s[i] - 'a']); // 更新最远位置if(i == right) {	// 到达最远位置res.push_back(right - left + 1);left = right + 1;	}	}return res;}

4.leetcode_

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

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

相关文章

YOLOv5改进 | 注意力机制 | 迈向高质量像素级回归的极化自注意力【全网独家】

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录&#xff1a; 《YOLOv5入门 …

高精密机械设备中滚珠导轨的表面处理工艺有哪些?

滚珠导轨是机床传动和定位的传动元件&#xff0c;其表面处理方式对机床性能和使用寿命起着决定性的作用&#xff0c;不同的表面处理方法可以提高导轨的耐磨性、抗腐蚀性和整体性能。那么&#xff0c;滚珠导轨的表面处理方式有哪几种呢&#xff1f; 1、磨削法&#xff1a;磨削技…

AFLNet入门教学——安装(Ubuntu22.04.4)

1、AFLNet简介 AFLNet 是一种专门用于测试网络协议实现的模糊测试工具。模糊测试是一种软件测试技术&#xff0c;通过向目标程序提供大量随机或半随机数据来发现潜在的漏洞和错误。AFLNet 的设计目标是增强 AFL (American Fuzzy Lop) 的功能&#xff0c;以更有效地测试网络协议…

input子系统学习(一)

1、输入子系统框架 2、编写一个简单的设备驱动层代码 #include<linux/module.h> #include<linux/init.h> #include<linux/input.h> #include<linux/time.h>struct input_dev *my_input_dev;static void timer_function(struct timer_list *t); DEFINE…

中医背诵笔记(黄帝内经、伤寒论等)

目录 黄帝内经上古天真论今人和古人之差异&#xff08;精神内守&#xff0c;病安从来&#xff1f;&#xff09;男女每个年龄阶段身体状态至人、圣人、贤人 宣明五气篇五脏所藏 与 五脏所主七情与情绪与气的关系 天干地支天干地支与脏腑经络的关系 伤寒论六种伤寒组合及对应的药…

一款轻量级的通信协议---MQTT (内含Linux环境搭建)

目录 MQTT MQTT的关键特点&#xff1a; 应用场景 Linux环境搭建&#xff1a; 1. 安装mosquitto 2. Linux下客户端进行通信 3. PC端和Linux下进行通信 安装MQTT. fx 4. MQTT.fx的使用 1. 点击连接 ​编辑 2. 连接成功 3. 订阅主题或者给别的主题发送消息 遇到的问…

(项目实战)聚合支付系统开发环境搭建-基于VMware17安装Centos7.9

1 开发环境介绍 dtpay聚合支付系统和ecard预付卡系统&#xff0c;服务端部署在Linux环境。后续的开发环境&#xff0c;生产环境都是基于Linux进行搭建&#xff0c;系统使用到的相关中间件(RocketMQ,Redis&#xff0c;Nginx等)&#xff0c;配置中心Nacos&#xff0c;数据库MySQ…

Emp.dll文件丢失?理解Emp.dll重要性与处理常见问题

在繁多的动态链接库&#xff08;DLL&#xff09;文件中&#xff0c;emp.dll 可能不是最广为人知的&#xff0c;但在特定软件或环境中&#xff0c;它扮演着关键角色。本文旨在深入探讨 emp.dll 的功能、重要性以及面对常见问题时的解决策略。 什么是 emp.dll&#xff1f; Emp.d…

python 第6册 辅助excel 002 批量创建非空白的 Excel 文件

---用教授的方式学习 此案例主要通过使用 while 循环以及 openpyxl. load_workbook()方法和 Workbook 的 save()方法&#xff0c;从而实现在当前目录中根据已经存在的Excel 文件批量创建多个非空白的Excel 文件。当运行此案例的Python 代码&#xff08;A002.py 文件&#xff0…

【STM32】在标准库中使用定时器

1.TIM简介 STM32F407系列控制器有2个高级控制定时器、10个通用定时器和2个基本定时器。通常情况下&#xff0c;先看定时器挂在哪个总线上APB1或者APB2&#xff0c;然后定时器时钟需要在此基础上乘以2。 2.标准库实现定时中断 #ifndef __BSP_TIMER_H #define __BSP_TIMER_H#if…

2.1 大语言模型的训练过程 —— 《带你自学大语言模型》系列

《带你自学大语言模型》系列部分目录及计划&#xff0c;完整版目录见&#xff1a; 带你自学大语言模型系列 —— 前言 第一部分 走进大语言模型&#xff08;科普向&#xff09; 第一章 走进大语言模型1.1 从图灵机到GPT&#xff0c;人工智能经历了什么&#xff1f;1.2 如何让…

基于MDEV的PCI设备虚拟化DEMO实现

利用周末时间做了一个MDEV虚拟化PCI设备的小试验&#xff0c;简单记录一下&#xff1a; DEMO架构&#xff0c;此图参考了内核文档&#xff1a;Documentation/driver-api/vfio-mediated-device.rst host kernel watchdog pci driver: #include <linux/init.h> #include …

【网络架构】keepalive

目录 一、keepalive基础 1.1 作用 1.2 原理 1.3 功能 二、keepalive安装 2.1 yum安装 2.2 编译安装 三、配置文件 3.1 keepalived相关文件 3.2 主配置的组成 3.2.1 全局配置 3.2.2 配置虚拟路由器 四、实际操作 4.1 lvskeepalived高可用群集 4.2 keepalivedngi…

AI视界引擎 | ​基于 YOLOv8 和计算机视觉 CV 的实时识别系统!

本文来源公众号“AI视界引擎”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;​基于 YOLOv8 和计算机视觉 CV 的实时识别系统&#xff01; 技术进步和创新正在尽可能地推进作者的日常生活&#xff0c;但仍有很大一部分社会群体因为…

自研Eclipse插件的生成及安装和使用

说明&#xff1a; 本处是使用个人自研的Eclipse插件为例&#xff0c;创建了一个菜单式的插件组&#xff0c;插件组下&#xff0c;有一个生成右击Jakarta EE服务端点类后&#xff0c;生成端点对应的Restful客户端。有什么问题&#xff0c;欢迎大家交流&#xff01;&#xff01;…

cython 笔记

数据类型 # bool 类型 // bool_type_ptactice.pyx cdef bint a 123 # 非0 为 真 &#xff0c; 0 为假 cdef bint b -123 cdef bint c 0 py_a a # cdef 定义的内容没法直接在python中直接引用 py_b b py_c c// main.py import pyximport pyximport.install(language_le…

教您设置打开IDM下载浮动条的快捷键 全网最强下载神器idm怎么使用教程 idm浮动条不显示怎么办

很多人都知道Internet Download Manager(以下简称IDM)是一款非常优秀的下载提速软件。它功能强大&#xff0c;几乎能下载网页中的所有数据&#xff08;包括视频、音频、图片等&#xff09;&#xff0c;且适用于现在市面上几乎所有的浏览器&#xff0c;非常受大家欢迎。 在使用I…

面向对象和面向过程编程的区别

引言 小伙伴们&#xff0c;当你们看到这章的时候&#xff0c;显然你们已经跨过了来自指针给你们带来的麻烦&#xff0c;唔~真棒呢&#xff0c;但是我们只学会一些基础的C语法并不能帮我们解决问题&#xff0c;甚至是稍微难一些的题目我们都没办法解决&#xff0c;那怎么办呢&am…

多机调度问题

#include<iostream> #include<string> using namespace std; struct work {int time;int number; }; int setwork0(int m,int n,int a[],struct work w[]) {int maxtime0;for(int i1; i<m; i){cout<<i<<"号设备处理作业"<<w[i].num…

python系列30:各种爬虫技术总结

1. 使用requests获取网页内容 以巴鲁夫产品为例&#xff0c;可以用get请求获取内容&#xff1a; https://www.balluff.com.cn/zh-cn/products/BES02YF 对应的网页为&#xff1a; 使用简单方法进行解析即可 import requests r BES02YF res requests.get("https://www.…