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

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

在这里插入图片描述

题目链接:452. 用最少数量的箭引爆气球
文档讲解:代码随想录
状态:没想出来

思路:对气球终点位置排序,从第一个气球终点位置射出箭,看这支箭可以尽可能穿过几个气球,如果遇到一个气球的起点在当前箭的终点之后,说明当前这支箭不能再穿过这个气球了,需要再射出一支新的箭,并将新的箭的终点设为当前气球的终点。

题解:

        // 按照气球的结束位置进行排序
        Arrays.sort(points, Comparator.comparingInt(a -> a[1]));

        // 初始化箭的数量为1,因为至少需要一支箭
        int arrNum = 1;
        // 初始化第一支箭的位置为第一个气球的结束位置
        int end = points[0][1];

        // 遍历所有气球
        for (int[] point : points) {
            // 如果当前气球的开始位置大于箭的结束位置,说明需要新的箭
            if (point[0] > end) {
                arrNum++; // 增加箭的数量
                end = point[1]; // 更新箭的位置为当前气球的结束位置
            }
        }

        // 返回所需的箭的数量
        return arrNum;

435. 无重叠区间

在这里插入图片描述

题目链接:435. 无重叠区间
文档讲解:代码随想录
状态:还行

思路:先固定一边排序,然后考虑上个区间终点和当前区间的起点关系。

题解:

    //起点排序
    public int eraseOverlapIntervals1(int[][] intervals) {
        // 按照区间的起始位置进行排序
        Arrays.sort(intervals, Comparator.comparingInt(a -> a[0]));

        // 记录需要移除的重叠区间数量
        int remove = 0;

        // 记录当前处理的区间的结束位置
        int pre = intervals[0][1];

        // 从第二个区间开始遍历
        for (int i = 1; i < intervals.length; i++) {
            // 如果当前区间的起始位置小于前一个区间的结束位置,
            // 表示当前区间与前一个区间重叠
            if (pre > intervals[i][0]) {
                // 需要移除当前区间
                remove++;
                // 更新当前处理的区间的结束位置为当前区间结束位置和前一个区间结束位置的较小值
                pre = Math.min(pre, intervals[i][1]);
            } else {
                // 如果当前区间与前一个区间不重叠,更新当前处理的区间的结束位置为当前区间的结束位置
                pre = intervals[i][1];
            }
        }

        // 返回需要移除的重叠区间数量
        return remove;
    }

    //终点排序,(推荐)
    public int eraseOverlapIntervals(int[][] intervals) {
        // 根据区间的终点进行排序
        Arrays.sort(intervals, (a, b) -> Integer.compare(a[1], b[1]));

        int res = -1; // 初始化结果为 -1,因为第一个区间即使重叠也不算在移除计数中
        int end = intervals[0][1]; // 初始化end为第一个区间的终点

        // 遍历所有区间
        for (int[] interval : intervals) {
            if (interval[0] < end) { // 当前区间与前一个区间重叠
                res++; // 增加移除重叠区间的计数
            } else { // 当前区间不重叠
                end = interval[1]; // 更新end为当前区间的终点
                // end = Math.min(end, interval[1]); //因为是对终点进行排序的interval[1]肯定大于或等于 end,所以不需要这个,如果是对起点排序则不能少               
            }
        }

        return res; // 返回移除重叠区间的数量
    }

类似重叠区间问题解题模板:

  1. 排序:根据问题需求,通常推荐对区间的终点进行排序。
  2. 考虑上个区间的终点和当前区间的起点的关系:这是判断区间是否重叠的关键。
  3. 根据题意求解:根据具体问题的要求来计算结果,例如计算需要移除的区间数量,找到最多数量的无重叠区间等。

763.划分字母区间

在这里插入图片描述

题目链接:763.划分字母区间
文档讲解:代码随想录
状态:把问题想复杂了,写了一个划分片段最少的版本出来了。。。。

思路:

  1. 统计每一个字符最后出现的位置。
  2. 从头遍历字符,并更新字符的最远出现下标,如果找到字符最远出现位置下标和当前下标相等了,则找到了分割点。

题解:

    public List<Integer> partitionLabels(String s) {
        List<Integer> res = new ArrayList<>(); // 结果列表,用于存放每个片段的长度
        char[] chars = s.toCharArray(); // 将输入的字符串转换为字符数组,便于处理
        int[] counter = new int[26]; // 记录每个字符最后出现的位置
        for (int i = 0; i < chars.length; i++) {
            counter[chars[i] - 'a'] = i; // 更新字符对应的最后出现位置
        }

        int far = -1; // 当前片段的最远位置
        int start = 0; // 当前片段的起始位置
        for (int i = 0; i < chars.length; i++) {
            far = Math.max(far, counter[chars[i] - 'a']); // 更新当前片段的最远位置
            if (i == far) { // 如果当前位置是当前片段的结束位置
                res.add(i - start + 1); // 将当前片段的长度添加到结果列表中
                start = i + 1; // 更新下一个片段的起始位置
            }
        }

        return res; // 返回结果列表
    }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一文搞懂Linux多线程【上】

目录 &#x1f6a9;引言 &#x1f6a9;再次理解页表 &#x1f6a9;初识线程 &#x1f6a9;线程和pthread库 &#x1f680;线程创建 &#x1f6a9;线程的资源共享问题 &#x1f6a9;线程的优缺点 &#x1f6a9;引言 今天&#xff0c;我们开始学习Linux中的线程部分。Lin…

中国车牌检测数据集VOC+YOLO格式2001张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2001 标注数量(xml文件个数)&#xff1a;2001 标注数量(txt文件个数)&#xff1a;2001 标注…

了解SD-WAN与传统WAN的区别

近年来&#xff0c;许多企业选择了SD-WAN作为他们的网络解决方案。云基础架构的SD-WAN不仅具备成本效益&#xff0c;而且提供更安全、更可靠的WAN连接&#xff0c;有助于实现持续盈利。客户能够更好地控制他们的网络&#xff0c;个性化定制且无需额外成本。 那么&#xff0c;为…

Golang逃逸分析

在Go语言中&#xff0c;逃逸分析(Escape Analysis)是一种编译器优化技术&#xff0c;用于确定变量是应该分配在堆上还是在栈上。这对程序的性能有显著的影响&#xff0c;因为栈上资源的分配速度和释放速度要比堆上快得多&#xff0c;同时堆上的内存管理也更加简单。 基本概念 …

快速鲁棒的 ICP (Fast and Robust Iterative Closest Point)

迭代最近点&#xff08;Iterative Closet Point&#xff0c;ICP&#xff09;算法及其变体是两个点集之间刚性配准的基本技术&#xff0c;在机器人技术和三维重建等领域有着广泛的应用。ICP的主要缺点是&#xff1a;收敛速度慢&#xff0c;以及对异常值、缺失数据和部分重叠的敏…

应用监控eBPF 版调研

参考&#xff1a; https://www.toutiao.com/article/7327353509735596559/?appnews_articletamp1717488680&use_new_style1&req_id20240604161119838096AAE4AD4F44788E&group_id7327353509735596559&wxshare_count1&tt_fromweixin&utm_sourceweixin&…

CentOS7.6安装RabbitMQ

前言&#xff1a;因为RabbitMQ是ERlang语言编写所以要先安装ERlang再安装RabbitMQ 安装ERlang 借鉴前辈原文地址&#xff1a;https://www.cnblogs.com/fengyumeng/p/11133924.html 第一步&#xff1a;安装依赖 yum -y install gcc glibc-devel make ncurses-devel open…

PDF秒变翻页式电子画册

​在当今数字化时代&#xff0c;将PDF文档转换成翻页式电子画册是一种提升作品展示效果和传播效率的有效方式。以下是将PDF秒变翻页式电子画册的攻略&#xff0c;帮助您轻松掌握数字创作技巧。 首先&#xff0c;选择一个合适的制作工具是关键。目前市场上有多种在线平台和软件可…

HTML5休闲小游戏《猫猫超市》源码,引流、刷广告利器

HTML5休闲小游戏《猫猫超市》源码&#xff0c;直接把源码上传到服务器就能使用了&#xff01; 下载链接&#xff1a;https://www.huzhan.com/code/goods467910.html

k8s如何使用 HPA 实现自动扩展

使用Horizontal Pod Autoscaler (HPA) 实验目标&#xff1a; 学习如何使用 HPA 实现自动扩展。 实验步骤&#xff1a; 创建一个 Deployment&#xff0c;并设置 CPU 或内存的资源请求。创建一个 HPA&#xff0c;设置扩展策略。生成负载&#xff0c;观察 HPA 如何自动扩展 Pod…

【Oracle安装】Linux安装Oracle内存不够怎么都装不上,卡在46%、60%、36%;内存不足解决办法,疑难杂症

一、问题描述 1.oracle 安装不报错&#xff0c;但就是无法安装成功&#xff0c;卡住 总是中途卡住&#xff0c;不一定卡在哪儿&#xff0c;也许是36%、46%、60%等等 它也不报错&#xff0c;什么都不说&#xff0c;或者过一会儿服务器自己把oracle的安装进程给杀了&#xff08…

echo 反引号 tail 重定向符

echo 作用&#xff1a;在命令行内输出指定内容&#xff0c;类似与 print()语句。 语法&#xff1a;echo 输出内容 当输出内容复杂时&#xff0c;可以使用""包围。 反引号 被 包围的内容&#xff0c;会被当做命令执行&#xff0c;而非普通字符。 tail 作用&…

2024中国·淮安高端人才精英赛北京分站赛首战告捷

“诚意满淮&#xff0c;创赢未来”&#xff01;6月20-21日&#xff0c;2024中国淮安高端人才精英赛首场分站赛在北京产业创新中心顺利举办。淮安市科技局党组书记、局长胡长青&#xff0c;淮安市委组织部人才处处长沈雪娇&#xff0c;淮安经开区党工委委员、管委会副主任、科技…

【2024德国工作】蓝卡攻略:人在中国,怎么去德国工作?

德国工作签证解析 外国人只要拥有符合德国劳动法的劳动合同&#xff0c;工资符合当地标准&#xff08;非紧缺专业&#xff0c;税前工资一般需达到49600欧元&#xff09;&#xff0c;并且具备一定的外语能力&#xff0c;就可以申请德国境内工作签证&#xff01;不申请者还需要有…

Perplexily首席执行官Aravind Srinivas斯里尼·瓦斯回应抄袭和侵权指控

Perplexity的“答案引擎”工作原理是收集网络上的海量信息&#xff0c;构建一个庞大的内容数据库&#xff08;索引&#xff09;。用户无需输入关键字&#xff0c;只需在Perplexity的平台或应用中提问&#xff0c;就能获得包含引文及网络内容链接的详细回答。 网站通过“机器人…

通过ETLCloud实现SQL Server数据同步至Oracle

SQL Server与Oracle作为全球两大主流的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;在企业级应用中扮演着至关重要的角色。它们各自凭借独特的技术优势、强大的数据处理能力以及高度的可扩展性&#xff0c;支撑着从中小型企业到大型跨国公司的各类复杂业务需…

Web渗透-XSS漏洞深入及xss-labs靶场实战

一、简介 xss全称&#xff08;cross site scripting)跨站脚本攻击&#xff0c;是最常见的web应用程序安全漏洞之一&#xff0c;位于owasptop102013年度第三名xss是指攻击者在网页中嵌入客户端脚本&#xff0c;通常是javascrip编写的危险代码&#xff0c;当用户使用浏览网页时&…

推荐系统三十六式学习笔记:原理篇.模型融合13|经典模型融合办法:线性模型和树模型的组合拳

目录 为什么要融合&#xff1f;“辑度组合”原理逻辑回归梯度提升决策树GBDT二者结合 总结 推荐系统在技术实现上一般划分为三个阶段&#xff1a;挖掘、召回、排序 。 为什么要融合&#xff1f; 挖掘的工作是对用户和物品做非常深入的结构化分析&#xff0c;各个角度各个层面…

【从零开始认识AI】梯度下降法

目录 1. 原理介绍 2. 代码实现 1. 原理介绍 梯度下降法&#xff08;Gradient Descent&#xff09;是一种用于优化函数的迭代算法&#xff0c;广泛应用于机器学习和深度学习中&#xff0c;用来最小化一个目标函数。该目标函数通常代表模型误差或损失。 基本思想是从一个初始…

《Nest系列 - 3. 掌握常见Nest 装饰器,奠定坚实基础!!!!!!》

nest 一个核心就是依赖注入&#xff0c;而中的大部分功能都是通过装饰器来实现的&#xff0c;那什么是装饰器呢&#xff1f; 就是一个 xxx &#xff0c;诸如 Module&#xff0c;controller, Get, Post 那这样有什么好处呢&#xff1f; 可以把他理解成一个方法&#xff0c;在不改…