代码随想录算法训练营29期Day36|LeetCode 435,763,56

 文档讲解:无重叠区间  划分字母区间  合并区间

435.无重叠区间

题目链接:https://leetcode.cn/problems/non-overlapping-intervals/description/

思路:

        按照右边界排序,从左向右记录非交叉区间的个数。最后用区间总数减去非交叉区间的个数就是需要移除的区间个数了。此时问题就是要求非交叉区间的最大个数。

核心代码:

class Solution {
public:static bool cmp (const vector<int>& a, const vector<int>& b) {return a[1] < b[1];}int eraseOverlapIntervals(vector<vector<int>>& intervals) {if (intervals.size() == 0) return 0;sort(intervals.begin(), intervals.end(), cmp);int count = 1;int end = intervals[0][1];for (int i = 1; i < intervals.size(); i++) {if (end <= intervals[i][0]) {end = intervals[i][1];count++;}}return intervals.size() - count;}
};

763.划分字母区间

题目链接:https://leetcode.cn/problems/partition-labels/description/

思路:

        一想到分割字符串就想到了回溯,但本题其实不用回溯去暴力搜索。

        题目要求同一字母最多出现在一个片段中,那么如何把同一个字母的都圈在同一个区间里呢?

        在遍历的过程中相当于是要找每一个字母的边界,如果找到之前遍历过的所有字母的最远边界,说明这个边界就是分割点了。此时前面出现过所有字母,最远也就到这个边界了。

        可以分为如下两步:

        1.统计每一个字符最后出现的位置。

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

核心代码:

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

56.合并区间

题目链接:https://leetcode.cn/problems/merge-intervals/description/

思路:

        先排序,让所有的相邻区间尽可能的重叠在一起,按左边界,或者右边界排序都可以,处理逻辑稍有不同。

        按照左边界从小到大排序之后,如果 intervals[i][0] <= intervals[i - 1][1] 即intervals[i]的左边界 <= intervals[i - 1]的右边界,则一定有重叠。(本题相邻区间也算重贴,所以是<=)

        知道如何判断重复之后,剩下的就是合并了,如何去模拟合并区间呢?

        其实就是用合并区间后左边界和右边界,作为一个新的区间,加入到result数组里就可以了。如果没有合并就把原区间加入到result数组。

核心代码:

class Solution {
public:vector<vector<int>> merge(vector<vector<int>>& intervals) {vector<vector<int>> result;if (intervals.size() == 0) return result;sort(intervals.begin(), intervals.end(), [](const vector<int>& a, const vector<int>& b){return a[0] < b[0];});result.push_back(intervals[0]); for (int i = 1; i < intervals.size(); i++) {if (result.back()[1] >= intervals[i][0]) {result.back()[1] = max(result.back()[1], intervals[i][1]); } else {result.push_back(intervals[i]);}}return result;}
};

今日总结

        今日学习时长2h,基本是看的题解,没时间做了学了下思路,这几天忙着别的事,放到周末去总结回顾吧,明天估计也得这样。

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

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

相关文章

WiFi 7 的核心要点

目录 WiFi 7 是什么&#xff1f; WiFi 7 的主要feature功能&#xff1a; 320Mhz channel 4K QAM Multi-Link Operation (MLO)&#xff0c;多链路操作 512 block ACK OFDMA&#xff1a;multiple RUs to single STA. 总结&#xff1a;性能是第一优先级&#xff0c;WiFi 7&#xf…

Python 方法重载

在其他编程语言中,例如Java和C++,可以使用方法重载来定义多个同名函数,但它们具有不同的参数类型和/或数量。然而,在Python中并没有直接支持方法重载的语法。 Python中的方法重载是指在同一个类中定义多个同名函数,但它们具有不同的参数类型和默认参数。由于Python是动态…

使用flink-cdc-sqlserver出现错误,需要批量开启sqlserver表cdc模式,监听表变化

docker安装 docker run -e "ACCEPT_EULAY" -e "MSSQL_SA_PASSWORDZcyc123456" -p 1433:1433 --name sqlserver -d mcr.microsoft.com/mssql/server:2017-latest开启库cdc模式 选择你自己的数据库&#xff0c;执行以下sql语句 EXEC sys.sp_cdc_enable_db…

Multi ElasticSearch Head插件基本操作

Multi ElasticSearch Head插件安装好之后我们可以进行一些基本的操作。 1、复合查询 因为ES提供了一些Restful风格的接口&#xff0c;可以让任何语言去调用&#xff0c;因此我们可以将之前的请求地址粘贴到Multi ElasticSearch Head插件里面&#xff0c;选择GET请求方式&#x…

C++——虚继承与菱形继承

C——虚继承与菱形继承 虚继承是C中一种特殊的继承方式&#xff0c;主要用来解决多重继承中的菱形继承问题。在菱形继承结构中&#xff0c;一个类继承自两个具有共同基类的类时&#xff0c;会导致共同基类的成员在派生类中存在两份拷贝&#xff0c;这不仅会导致资源浪费&#…

RIP——路由信息协议

目录 1 内部网关协议 RIP 1.1 协议 RIP 的工作原理 1.2 RIP“距离”的定义 1.3 RIP 协议的三个特点 1.4 RIP 协议的优缺点 1.5 路由表的建立 路由表主要信息和更新规则 2 距离向量算法 3 RIP2 报文 4 坏消息传播得慢 5 启动RIP 启动RIP: router rip 命令 启用和检…

redis百万级数据量预热方案

一、需求描述 项目中需要查询用户对应的地市信息&#xff0c;这些数据是存储在mysql数据库中&#xff0c;并且数据量是百万级别&#xff0c;查询频率高&#xff0c;所以想将需要查询的字段存储到redis中&#xff0c;来提高查询速度 二、需求分析 对redis数据预热&#xff0c…

Java持久化机制和实现的过程

Java持久化&#xff08;Java Persistence&#xff09;是指将数据&#xff08;通常是对象&#xff09;从临时存储区&#xff08;如内存&#xff09;保存到永久存储区&#xff08;如数据库&#xff09;的过程。这使得应用程序可以保存和检索数据&#xff0c;即使在应用程序关闭后…

面试题汇总

1 MySQL事务如何实现 MySQL数据库中事务的实现主要依赖于支持事务的存储引擎&#xff0c;如InnoDB。InnoDB通过日志系统和锁机制来确保事务处理过程满足ACID&#xff08;原子性、一致性、隔离性和持久性&#xff09;特性&#xff1a; 原子性 (Atomicity)&#xff1a; Redo Log …

Elasticsearch:Geoshape query

Geoshape 查询可以用于过滤使用 geo_shape 或 geo_point 类型索引的文档。 geo_shape 查询使用与 geo_shape 或 geo_point 映射相同的索引来查找具有与查询形状相关的形状的文档&#xff0c;并使用指定的空间关系&#xff1a;相交&#xff08;intersect&#xff09;、包含(con…

Git介绍与常用命令总结

Git介绍与其常用命令总结 1、Git介绍2、Git的使用3、Git常用命令3.1 初始化仓库3.2 克隆仓库3.3 配置用户信息3.4 提交代码(Commit)3.5 推送代码(Push)3.6 拉取代码(Pull)3.7 分支(Branch)3.8 远程仓库(Remote)3.9 撤销回退本地改动3.10 更新本地仓库与远程仓库 1、Git介绍 Gi…

服务降级的快速发现与三方告警

一、熔断与降级 1、降级 基本概念 服务降级是从整个系统的负荷情况出发和考虑的&#xff0c;对某些负荷会比较高的情况&#xff0c;为了预防某些功能&#xff08;业务场景&#xff09;出现负荷过载或者响应慢的情况&#xff0c;在其内部暂时舍弃对一些非核心的接口和数据的请…

AI Prompt工程师 学习整理

前言 如果说Al大语言模型(LLM,Large Language Model)是宝藏我,那么Prompt提示词就是打开宝藏的钥匙。 最新一代的Al大语言模型具备出色的创作能力,能够生成富有人类感情、严谨逻辑、多场景应用的内容,而如何获得高质量的回答,正确学习使用Prompt提示词是关键。 &#x1f4a5…

【2024美国大学生数学建模竞赛】2024美赛C题网球运动中的势头,网球教练4.0没人比我更懂这个题了!!!

【2023美国大学生数学建模竞赛】2024美赛C题 问题分析、数学模型、实现代码、完整论文 引言 题目将于2024年2月2日6:00发布。我们团队将会在8点前准时更新问题分析&#xff0c;逐步更新数学模型和实现代码&#xff0c;最后发布完整的论文。 更新进展&#xff1a; &#xff08…

Java算法 leetcode简单刷题记录11

Java算法 leetcode简单刷题记录11 删除排序链表中的重复元素&#xff1a; https://leetcode.cn/problems/remove-duplicates-from-sorted-list/ 合并俩个有序数组&#xff1a; https://leetcode.cn/problems/merge-sorted-array/ int[]数组转 List: Arrays.stream(arr).colle…

轻型民用无人机驾驶航空器安全操控——理论考试多旋翼部分笔记

今天已经可以在线考取轻型民用无人机驾驶航空器执照了&#xff0c;所以我也在在线观看完视频之后整理了如下的知识点&#xff0c;所有知识点全部来自UOM平台。 目录 航空器知识 &#xff08;1&#xff09;多旋翼民用无人驾驶航空器螺旋桨的作用 &#xff08;2&#x…

Servlet简述

Servlet是动态web资源开发技术&#xff0c;其实就是一个接口&#xff0c;将来定义Servlet实现类时&#xff0c;都必须实现该接口&#xff0c;并让web服务器运行Servlet 1.快速入门 使用注释配置访问路径在Servlet3.0之后应用&#xff0c;在此之前都是使用xml配置文件来配置的。…

WPS WORD 宏导出高亮文本

WPS手机版可以直接导出高亮文本&#xff0c;但只能导出手机编辑的部分&#xff0c;如果同时在电脑上编辑过&#xff0c;电脑上高亮的无法导出&#xff0c;因为作者不一样。 但WPS电脑版没有这个功能&#xff0c;只能通过宏编程实现。 这里利用了审阅模式&#xff0c;在文字高亮…

Java 8流(Stream API)实战:使用list.stream()判断里面的元素user.name是否全部都为空字符串

Java 8流 Stream API实战&#xff1a;使用list.stream判断里面的元素user.name是否全部都为空字符串 一、引言&#xff1a;二、主体部分&#xff1a;三、结尾段落&#xff1a; 一、引言&#xff1a; 在处理用户数据时&#xff0c;我们常常需要验证或操作集合中的每个元素。特别…

springBoot+Vue汽车销售源码

源码描述: 汽车销售管理系统源码基于spring boot以及Vue开发。 针对汽车销售提供客户信息、车辆信息、订单信息、销售人员管理、 财务报表等功能&#xff0c;提供经理和销售两种角色进行管理。 技术架构&#xff1a; idea(推荐)、jdk1.8、mysql5.X(不能为8驱动不匹配)、ma…