算法训练(leetcode)二刷第二十六天 | *452. 用最少数量的箭引爆气球、435. 无重叠区间、*763. 划分字母区间

刷题记录

  • *452. 用最少数量的箭引爆气球
  • 435. 无重叠区间
  • *763. 划分字母区间
    • 笨拙版
    • 进阶版

*452. 用最少数量的箭引爆气球

leetcode题目地址

先对气球的坐标按照Xstart进行升序排序,只要两个气球之间挨着就可以一箭射穿,因此排序后查看后一个气球的起始坐标是否与前一个气球的结束坐标挨着(挨着:后一个起始坐标<=前一个结束坐标)。

时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn)
空间复杂度: O ( 1 ) O(1) O(1)

// java
class Solution {public int findMinArrowShots(int[][] points) {// 按照起始坐标从小到大排序 // 使用Integer内置比较方法,不会溢出Arrays.sort(points, (a, b) -> Integer.compare(a[0], b[0]));int cnt = 1;for(int i=1; i<points.length; i++){if(points[i][0] > points[i-1][1]){cnt++;}else{points[i][1] = Math.min(points[i][1], points[i-1][1]); }// System.out.println(points[i][0] + " " + points[i][1]);}return cnt;}
}

435. 无重叠区间

leetcode题目地址

和上题思路类似。本题是找到有重叠的区间,然后删除覆盖范围较大的那一个。先对区间进行排序,按照区间起始位置升序排序,若起始位置相同,则按照结束位置升序排序。

然后遍历数组,若后一个区间的起始位置小于前一个区间的结束位置(等于不算重叠),则两区间有重叠,删除后面的区间。这里的删除不是物理删除,是逻辑删除,更新后一个区间的结束区间即可,后一个区间的结束位置等于前一个区间的结束位置和后一个区间结束位置较小的那个。

时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn)
空间复杂度: O ( 1 ) O(1) O(1)

// java
class Solution {public int eraseOverlapIntervals(int[][] intervals) {Arrays.sort(intervals, (a, b) -> {if(a[0] == b[0]){return Integer.compare(a[1], b[1]);}return Integer.compare(a[0], b[0]);});int cnt = 0;for(int i=1; i<intervals.length; i++){// 重叠if(intervals[i][0] < intervals[i-1][1]){cnt++;intervals[i][1] = Math.min(intervals[i][1], intervals[i-1][1]);}}return cnt;}
}

*763. 划分字母区间

leetcode题目地址

笨拙版

先统计字符串中每个字母的出现次数。
记录目前子串中出现的字母,若子串中的字母均已访问过则切分为一个子串记录长度。

使用map记录子串中的字母以及对应字母的剩余个数,当字母剩余0个时即当前字母访问结束从map中移除。

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( n ) O(n) O(n)

// java
class Solution {public List<Integer> partitionLabels(String s) {int[] chars = new int[26];for(int i=0; i<s.length(); i++){chars[s.charAt(i) - 'a']++;}List<Integer> result = new ArrayList<>();Map<Character, Integer> hash = new HashMap<>();int start = 0;for(int i=0; i<s.length(); i++){chars[s.charAt(i) - 'a']--;if(hash.containsKey(s.charAt(i))) hash.put(s.charAt(i), hash.get(s.charAt(i))-1);else hash.put(s.charAt(i), chars[s.charAt(i) - 'a']);if(hash.get(s.charAt(i)) == 0) hash.remove(s.charAt(i));if(hash.isEmpty()){result.add(i-start+1);start = i+1;}}return result;}
}

进阶版

先统计每个字符的最后出现的位置,当访问字符串时,若已到达子串中所有字符的最后位置,则记录当前子串长度。

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( 1 ) O(1) O(1)

// java
class Solution {public List<Integer> partitionLabels(String s) {int[] hash = new int[26];for(int i=0; i<s.length(); i++){// 记录最后出现的位置hash[s.charAt(i) - 'a'] = i;}List<Integer> result = new ArrayList<>();int start = 0;int end = 0;for(int i=0; i<s.length(); i++){end = Math.max(end, hash[s.charAt(i) - 'a']);if(i == end){// 到达当前子串最右端result.add(end-start+1);start = i+1;}}return result;}
}

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

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

相关文章

第12章 系统部署

12.1 Kickstart使用背景介绍 随着公司业务不断增加,经常需要采购新服务器,并要求安装Linux系统,并且要求Linux版本要一致,方便以后的维护和管理,每次人工安装linux系统会浪费掉更多时间,如果我们有办法能节省一次一次的时间岂不更好呢? 大中型互联网公司一次采购服务器…

深入探讨LINQ中的数据分块(Chunk)方法及其应用

LINQ作为C#的核心特性之一&#xff0c;大大简化了数据操作的复杂性。它不仅能够通过声明式的语法进行数据查询&#xff0c;还能实现复杂的数据操作&#xff0c;比如筛选、排序、分组等。而在众多LINQ操作中&#xff0c;Chunk方法作为一种数据分块功能&#xff0c;能够让开发者更…

【Window主机访问Ubuntu从机——Xrdp配置与使用】

使用Xrdp在Window环境下远程桌面访问Ubuntu主机 文章目录 Ubuntu安装图形化界面Ubuntu安装Xrdp通过网线连接两台主机Window主机有线连接配置Ubuntu从机设置测试有线连接 Window主机打开远程桌面功能参考文章总结 Ubuntu安装图形化界面 sudo apt update sudo apt upgrade sudo …

ECharts图表图例8

用eclipse软件制作动态单仪表图 用java知识点 代码截图&#xff1a;

实验6记录网络与故障排除

实验6记录网络与故障排除 实验目的及要求&#xff1a; 通过实验&#xff0c;掌握如何利用文档记录网络设备相关信息并完成网络拓扑结构的绘制。能够使用各种技术和工具来找出连通性问题&#xff0c;使用文档来指导故障排除工作&#xff0c;确定具体的网络问题&#xff0c;实施…

Javascript高级—常见算法

大数相加问题 function sumString(a, b){a a ;b n ;var arrA a.spilt(),arrB b.spilt(),distance arrA.length - arrB.length, // 计算两者的长度差&#xff0c;取最大的那个作为基准点len distance > 0 ? arrA.length : arrB.length,carry 0; // 表示相…

Linux系统常用操作与命令指南

一、快捷分类 1、移动光标 h&#xff0c; j&#xff0c; k&#xff0c; l 左&#xff0c; 下&#xff0c; 上&#xff0c; 右 Ctrl-F:下翻一页 Ctrl-B:上翻一页 Ctrl-U:上翻半页 Ctrl-d:下翻半页 0:跳至行首&#xff0c;不管有无缩进&#xff0c;就是跳到第0个字…

Kafka 与 RabbitMQ 的联系

Kafka 与 RabbitMQ 的区别与联系 一、引言 在现代软件架构中&#xff0c;消息中间件扮演着至关重要的角色。它们帮助系统解耦、提高可伸缩性并确保数据的可靠传递。在众多消息中间件中&#xff0c;Apache Kafka 和 RabbitMQ 是最受欢迎的选择之一。虽然它们都用于消息传递&am…

读取文件内容、修改文件内容、识别文件夹目录(Web操作系统文件/文件夹详解)

前言 因 Unicode IDE 编辑器导入文件、文件夹需要&#xff0c;研究了下导入文件/文件夹的功能实现&#xff0c;发现目前相关文章有点少&#xff0c;故而记录下过程&#xff0c;如果有误&#xff0c;还望指正。(API的兼容性及相关属性、接口定义&#xff0c;请自行查看文件系统 …

SQLite 全文检索:快速高效的文本查询方案

文章目录 什么是全文检索&#xff1f;如何启用 FTS&#xff1f;插入数据执行全文检索关联原始表与 FTS 表数据更新结论 说明: 本文以博客内容全文检索为例。 什么是全文检索&#xff1f; 全文检索是指对文本数据进行索引和查询的一种技术。与常规的 LIKE 查询不同&#xff0c…

【卡尔曼滤波】数据融合Fusion的应用 C语言、Python实现(Kalman Filter)

【卡尔曼滤波】数据融合Fusion的应用 C语言、Python实现&#xff08;Kalman Filter&#xff09; 更新以gitee为准&#xff1a; gitee地址 文章目录 卡尔曼滤波数据融合Python实现C语言实现多个数据如何融合附录&#xff1a;压缩字符串、大小端格式转换压缩字符串浮点数压缩Pac…

docker-hub 无法访问,使用windows魔法拉取docker images再上传到linux docker环境中

云机的服务器是可以docker拉取镜像的&#xff0c;但是本地的虚拟机、物理服务器等网络环境不好的情况&#xff0c;是无法访问docker-hub的&#xff0c;即使更换了docker镜像源国内源也无法使用。 本文章使用 在魔法网络环境下的windows&#xff0c;下载docker images后&#xf…

vxe-vxe-colgroup后端返回数据 对数据进行处理 动态合并分组表头(v-if控制表格渲染(数据请求完成后渲染))

1.html vxe-colgroup循环合并数据&#xff1b;v-if控制表格渲染&#xff08;数据请求完成后渲染&#xff09; <template><vxe-table v-if"isTableReady" :data"tableData"><vxe-colgroup title"基本信息"><template v-for…

Python →爬虫实践

爬取研究中心的书目 现在&#xff0c;想要把如下网站中的书目信息爬取出来。 案例一 耶鲁 Publications | Yale Law School 分析网页&#xff0c;如下图所示&#xff0c;需要爬取的页面&#xff0c;标签信息是“<p>”&#xff0c;所以用 itemssoup.find_all("p&…

【Linux学习】【Ubuntu入门】1-4 ubuntu终端操作与shell命令1

1.使用快捷键CtrlAltT打开命令终端&#xff0c;或者单击右键点击… 2.常用shell命令 目录信息查看命令&#xff1a;ls ls -a&#xff1a;显示目录所有文件及文件夹&#xff0c;包括隐藏文件&#xff0c;比如以.开头的 ls -l&#xff1a;显示文件的详细信息 ls -al&#xff1…

WordPress 6.7 “Rollins”发布

每个 WordPress 版本都会向一位在音乐界留下不可磨灭印记的艺术家致敬。WordPress 6.7 的代号为“Rollins”&#xff0c;旨在向传奇爵士萨克斯演奏家桑尼罗林斯致敬。罗林斯是爵士乐界最伟大的即兴演奏家和先驱之一&#xff0c;他以精湛的技术、创新精神和无畏的音乐表达方式影…

ESXi安装【真机和虚拟机】(超详细)

项目简介&#xff1a; ESXi&#xff08;Elastic Sky X Integrated&#xff09;是VMware公司开发的一种裸机虚拟化管理程序&#xff0c;允许用户在单一物理服务器上运行多个虚拟机&#xff08;VM&#xff09;。它直接安装在服务器硬件上&#xff0c;而不是操作系统之上&#xff…

SQL Server中,CONVERT函数转换日期

在SQL Server中&#xff0c;CONVERT函数支持多种样式代码&#xff08;style codes&#xff09;&#xff0c;用于指定日期和时间的格式。样式代码 23 是一种常用的格式&#xff0c;表示 yyyy-mm-dd。以下是一些常用的样式代码&#xff1a; 日期格式样式代码 0 or 100 - mon dd…

【若依框架】代码生成详细教程,15分钟搭建Springboot+Vue3前后端分离项目,基于Mysql8数据库和Redis5,管理后台前端基于Vue3和Element Plus,开发小程序数据后台

今天我们来借助若依来快速的搭建一个基于springboot的Java管理后台&#xff0c;后台网页使用vue3和 Element Plus来快速搭建。这里我们可以借助若依自动生成Java和vue3代码&#xff0c;这就是若依的强大之处&#xff0c;即便你不会Java和vue开发&#xff0c;只要跟着石头哥也可…

学习日志010--python异常处理机制与简单文件操作

一.异常处理机制 经常使用qq的朋友们都知道&#xff0c;QQ不时会让你升级&#xff0c;有心的小伙伴在升级日志里会看见许多已修复了XXX。奇怪&#xff0c;当我们编写程序时发生错误时总会叫停整个程序&#xff0c;而这些软件上出现种种错误&#xff0c;去不影响我们平时的使用…