代码随想录算法训练营Day33|452. 用最少数量的箭引爆气球,435. 无重叠区间 , 763.划分字母区间

452. 用最少数量的箭引爆气球:代码随想录

这道题目的意思就是你可以垂直的射箭,让你用最少的箭数射完所有的气球,这样其实我们可以很容易的就想到,我们尽可能的去射重叠的气球,这样我们一支箭就可以射多支,所以这里我们可以先对数组进行一个排序,就是可以先考虑到那些重叠在一起的,这题其实题目的要求跟数组元素的顺序无关,排完序后,这里我犯了一个错误就是,我的思路都是对的,就是在判断他们两个气球是不是重叠的时候,其实只要考虑右边界end和下一个气球的左边界就可以了,因为你已经排好序了,这里我将两个气球的左右边界都考虑进去了,所以就写的很复杂,在判断完之后,记得要更新右边界,来看具体的代码的实现

class Solution {
public:static bool cmp(pair<int, int> a, pair<int, int> b) {return a.first < b.first;}int findMinArrowShots(vector<vector<int>>& points) {int n = points.size();pair<int, int> nums[n];for (int i = 0; i < n; i++) {nums[i].first = points[i][0];nums[i].second = points[i][1];}sort(nums, nums + n, cmp);int result = 1; int end = nums[0].second;for (int i = 1; i < n; i++) {if (nums[i].first <= end) {end = min(end, nums[i].second);}else {result++;end = nums[i].second;}}return result;}
};

在这里我用了一个pair数组,其实你也可以不用,直接用vector也可以,首先就是sort排序,然后就是一开始初始化有边界right,和结果result,只要我当前遍历的这个气球的左边界小于等于我的right,就代表我们是重叠的这样就让right=我们两个右边界的最小值,这样才是判断后面的气球是不是和前面两个重叠,如果不是重叠的,那就直接将result++,然后让我的右边界等于我下一个结点的右边界,就可以了,因为此时我肯定需要另一支箭,这就是这道题目的解答,来看下一道题目

435. 无重叠区间:代码随想录

这道题目的意思就是给你很多个区间,让你求出要去除多少个区间才能保证所有的区间都是不重叠的,其实这道题目和上一道题非常的像,只要你上一道题目弄懂了,这道题稍微改一下就可以了,我们来看具体的代码的实现,

class Solution {
public:static bool cmp1(vector<int> a, vector<int> b){return a[0] < b[0];}int eraseOverlapIntervals(vector<vector<int>>& points) {int n = points.size();sort(points.begin(),points.end(),cmp1);int result = 0; int end = points[0][1];for (int i = 1; i < n; i++) {if (nums[i].first < end) {result++;end=min(end,points[i][1]);}else {end = points[i][1];}}return result;}
};

主体的代码并没有什么变化,就是if条件判断那里有些细节需要改一下,当重叠的的时候,我们需要将结果加一,然后同样的就是将右边界与这个区间的右边界取一个最小值,那么为什么要取最小值呢,你稍微想想就知道,如果我取大的话,那么后面的是不是更容易发生重叠啊,所以这里我们就是要选取更小的那个,同样的如果说不重叠的话,那就是直接让右边界等于下一个的右边界就可以了,直到数组遍历完,再返回结果即可。下面来看第三题

763.划分字母区间:代码随想录

这道题目的意思就是给你一个字符串,让你划分一下这个字符串,你需要保证这个划分是按顺序来划分的,并且你划分的每一个子串里出现的字符只能在这个子串里出现,也就是说一个字符只能出现在一个子串里,那么,这道题目我们如何来思考呢,这里的思路比较难想,我们要确定这个子串的边界,是不是要知道这个子串里的字符最远的位置在哪里,因为可能有多个相同的字符,你需要保证他们都在同一个子串里,所以我们可以首先考虑先遍历一遍数组,将出现的每个字符的最远的位置都给记录下来,然后再遍历一遍数组,动态的来判断,当我的最远的边界等于我现在的for循环里的i时,代表这就是一个子串,然后就让left也就是左边界等于i+1,直到数组里的所有的元素全部都遍历完之后,就返回我们的结果,下面来看具体的代码的实现。

class Solution {
public:vector<int> partitionLabels(string s) {vector<int> result; int n = s.size();int hash[27];for (int i = 0; i < s.size(); i++) {hash[s[i] - 'a'] = i;}int left = 0; int right = 0;for (int i = 0; i < n; i++) {right = max(right, hash[s[i] - 'a']);if (i == right) {result.push_back(right - left + 1);left = i + 1;}}return result;}
};

这里首先就是一个哈希数组,用来记录最远的距离,然后就是定义一个子串的左右边界left,right,每次都让我的right,也就是我的右边界动态的更新,直到我的遍历的位置达到right时,就代表前面的所有字符,都只在这一个子串里面出现过。最后将(right-left+1)的值加入到结果集数组中,最后等到循环结束之后返回,数组即可。

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

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

相关文章

22.2 正则表达式-数据验证、数据变换

1. 数据验证 正则表达可用于验证文本是否满足某种给定的模式。 正则表达式也是一种语言&#xff0c;因此在使用之前必须先对其进行编译&#xff0c;并将编译结果保存在一个Regexp类型的变量里。以下两个函数即返回该变量的指针。 re, err : regexp.Compile("^[a-zA-Z0-…

Charles抓包工具系列文章(一)-- Compose 拼接http请求

一、背景 众所周知&#xff0c;Charles是一款抓包工具&#xff0c;当然是http协议&#xff0c;不支持tcp。&#xff08;如果你想要抓tcp包&#xff0c;请转而使用wireshark&#xff0c;在讲述websocket的相关技术有梳理过wireshark抓包&#xff09; 话说回来&#xff0c;char…

鸿蒙开发系统基础能力:【@ohos.hichecker (检测模式)】

检测模式 HiChecker可以作为应用开发阶段使用的检测工具&#xff0c;用于检测代码运行过程中部分易忽略的问题&#xff0c;如应用线程出现耗时调用、应用进程中Ability资源泄露等问题。开发者可以通过日志记录或进程crash等形式查看具体问题并进行修改&#xff0c;提升应用的使…

存储系统概述

目录 层次结构 存储器的分类 存储器的编址和端模式 存储器端模式 存储器的技术指标 1. 存储容量 示例&#xff1a; 2. 访问速度 访问速度的表现形式&#xff1a; 示例&#xff1a; 3. 功耗 示例&#xff1a; 4. 可靠性 可靠性指标&#xff1a; 示例&#xff1a;…

嵌入式学习(Day50:ARM汇编)

1.ARM的7种工作模式&#xff1a; User:用户模式&#xff0c;非特权模式&#xff1b; FIQ&#xff1a;快速中断模式。高优先级中断 IRQ&#xff1a;中断模式。低优先级中断&#xff1b; Supervisor&#xff1a;管理员模式&#xff08;特权模式&#xff09;。当复位或软中断指…

【自然语言处理系列】Python 字符串操作技巧:清理、替换与合并

在编写Python程序时&#xff0c;字符串处理是一项常见的任务。了解如何有效地清理、修改和合并字符串对于数据预处理、文本分析和日常编程都至关重要。本文将引导您通过一系列实用的示例来掌握Python中字符串的核心操作&#xff0c;包括去除不需要的空格和特殊字符、替换文本中…

英语中定冠词the的用法(the用法口诀)

文章目录 口诀英语中定冠词 "the" 的用法详解定冠词 "the" 的基本用途1. 指特定的人或事物示例&#xff1a; 2. 已提及的人或事物示例&#xff1a; 3. 独一无二的事物示例&#xff1a; 定冠词 "the" 在地理名词中的应用1. 山脉、河流、群岛和海洋…

代码随想录算法训练营第六十五天|KM99. 岛屿数量——深搜、KM99. 岛屿数量——广搜、KM100. 岛屿的最大面积

代码随想录算法训练营第六十五天 KM99. 岛屿数量——深搜 题目链接&#xff1a;KM99. 岛屿数量 使用递归深度搜索&#xff0c;将每次遇到的岛屿上下左右记录为已经到过&#xff0c;如果遇到没到过的说明它上下左右不是之间遍历过的岛屿&#xff0c;结果计数1。最后统计计数即…

【机器学习项目实战(二)】基于朴素贝叶斯的中文垃圾短信分类

完整代码、数据集和相应的报告 链接已经放在了正文最下方, 供大家参考学习 摘要 ​ 本文探讨了中文垃圾短信分类的问题,通过收集实际数据集,运用多种机器学习算法进行分类,并对比了不同算法在垃圾短信分类任务上的性能。本研究旨在提高中文垃圾短信的识别准确率,为构建更…

java溯本求源之基础(二十五)之--ArrayList常用方法介绍

1. 介绍 1.1简介 ArrayList ArrayList 是 Java 集合框架中的一个类&#xff0c;位于 java.util 包中。它实现了 List 接口&#xff0c;提供了一个动态数组的功能。与普通数组不同&#xff0c;ArrayList 可以在需要时自动调整其容量&#xff0c;以容纳更多的元素。这使得它非常…

鸣潮基于虚幻引擎4的多平台效果和性能优化实践

《鸣潮》基于虚幻引擎4的多平台效果和性能优化实践 | 王宏波 库洛游戏 文章目录 《鸣潮》基于虚幻引擎4的多平台效果和性能优化实践 | 王宏波 库洛游戏Why Deferred Shading移动端高质量的TAAU渲染流程Ghost和Flicker优化&#xff0c;一些图像空间算法的融入动静态像素的差异处…

第三代全智能AI无人直播系统:销售变现的革新利器

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;已经(keJ0277)逐渐渗透到我们生活的方方面面。特别是在直播销售领域&#xff0c;第三代全智能AI无人直播系统的出现&#xff0c;正成为销售变现的革新利器&#xff0c;引领着行业的新一轮变革。一、全智能AI无…

mysql数据库的管理

MySQL数据库管理 mysql数据文件 存放在初始化时定义的datadir 该目录下放置三种后缀文件 .frm 与表相关的元数据&#xff08;meta&#xff09;&#xff0c;表结构的定义信息等。 .MYD mylSAM存储引擎专用 .MYI mylSAM存储引擎专用 MySQL语言类型 DDL&#xff08;数据定义语言…

2024.06.24【读书笔记】丨生物信息学与功能基因组学(第十八章 人类疾病 第二部分)【AI测试版】

第二部分:人类遗传疾病的生物信息学方法 章节标题:【读书笔记】丨生物信息学与功能基因组学(第十八章 人类疾病 第二部分) 摘要: 第二部分聚焦于如何利用生物信息学方法来研究人类遗传疾病。随着生物信息学的发展,我们能够通过计算工具和数据库来分析蛋白质、基因和基…

App推广新突破!Xinstall无注册码方案,一键解决您的获客难题

在互联网的浪潮中&#xff0c;App推广与运营面临着前所未有的挑战。随着流量红利的衰退&#xff0c;如何高效、精准地触达用户&#xff0c;提升用户留存和转化率&#xff0c;成为每个企业都必须面对的问题。在这个关键时刻&#xff0c;Xinstall以其无注册码的解决方案&#xff…

使用vant4+vue3制作电商购物网站

一、前言 1.本项目基于vant4vue3构建&#xff0c;默认友友们已具备相关知识&#xff0c;如不具备&#xff0c;请友友们先去了解相关该概念 2.项目数据来源于开源框架 新峰商城 在此指出 3.此项目目的在于帮助友友们了解基本的用法&#xff0c;没有涉及太多的逻辑操作。 二、…

软件设计师笔记-系统开发和运行知识(二)

模块 构成模块(或称为组件)的四个基本要素:输入和输出、处理功能、内部数据、程序代码。 输入 (Input): 输入是模块从外部接收的数据、信号或指令。这些输入数据可以是用户通过用户界面输入的,也可以是从其他模块或系统传递过来的。输入数据的类型、格式和范围对模块的功能…

Java中的安全架构设计与实现

Java中的安全架构设计与实现 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们来聊聊Java中的安全架构设计与实现。随着互联网技术的不断发展&#xff0c…

magisk获取root

使用magisk修补boot.img 一定是手机系统匹配的 boot.img 刷入手机的 /storage/emulated/0/Download/ adb push "E:\下载\boot.img" /storage/emulated/0/Download/ 使用 magisk 点击安装&#xff0c; 有Recovery 取消勾选 选择 修补一个文件&#xff0c; 选择手机下…

零基础CMake学习笔记

零基础CMake学习笔记 1. 名词解释make cmake Makefile CMakeLists.txt 2. CMake语法介绍2.1 常用指令2.1.1 project2.1.2 set2.1.3 message2.1.4 add_executable2.1.5 aux_source_directory2.1.6 include_directories2.1.7 add_definitions2.1.8 add_subdirectory2.1.9 add_lib…