【leetcode 力扣刷题】汇总区间//合并区间//插入区间

一些关于区间的力扣题目

  • 228. 汇总区间
  • 56. 合并区间
  • 57. 插入区间

228. 汇总区间

题目链接:228.汇总区间
题目内容:在这里插入图片描述
看题目真是没懂这个题到底是要干啥……实际上题目要求的恰好覆盖数组中所有数字最小有序区间范围列表,这个最小是指一个区间范围小。比如能够覆盖{2,3,4,6}的区间可以是[2,6],但是5在区间内,却不在数组内,因此这个区间不是最小的,可以缩小成[2,4]和[6,6],这才是满足题意恰好覆盖所有数字的最小区间。
理解题意后,解法就很简单了,为了保证区间能够覆盖所有数组中的数字,同时又不存在在区间内但不在数组内的数字,那就只能考虑用数组内的连续数字来组成区间。什么意思呢?就是把数组内连续的数字组成一个区间,单独的数字单独一个区间。比如上面的{2,3,4,6},其中{2,3,4}就是连续的,组成一个区间[2,4],6是单独的需要一个区间[6, 6]。由于数组本身是有序的,那么就找连续递增的数字组成一个区间,nums[j] == nums[j-1]。 代码如下(C++):

class Solution {
public:vector<string> summaryRanges(vector<int>& nums) {vector<string> ans;int start = 0, end = 1;while(end <= nums.size()){//end是连续区间结束后的数字if(end == nums.size() || nums[end] != nums[end - 1] + 1){if(start == end - 1)//如果start和end-1相等,说明这是只有一个数字的独立区间ans.emplace_back(to_string(nums[start]));else//start到end-1是连续区间ans.emplace_back(to_string(nums[start])+"->"+to_string(nums[end-1]));start = end;  //下一段区间的开始 }end++;         }return ans;}
};

56. 合并区间

题目链接:56. 合并区间
题目内容:
在这里插入图片描述
先看看给的例子,理解题意:
在这里插入图片描述
题目要求我们合并重叠的区间,那什么算是重叠的区间呢?在区间是按照左端点升序排序的前提下,前面一个区间d1的右端点与后面一个区间d2的左端点有交集,即d1.right ≥ d2.left,就说明两个区间重叠,至于d2.right与d1.right的大小关系,是不重要的:
在这里插入图片描述
d1和d2有交集,将两个区间合并成[ min(d1.left,d2.left),max(d1.right,d2.right) ]。
所以首先要做的是将区间数组按照区间的左端点排序,之后开始判断前后两个区间是否有重叠。判断是否重叠只需要将答案区间数组中最后一个区间和待加入的区间比较,因为当前答案数组的最后一个区间的left是比待加入的区间left更小的,答案区间数组中的区间是没有重叠的,那么答案数组中的最后一个区间的left肯定是大于再前面一个区间的right的,待加入区间的left肯定是比答案数组中倒数第二个区间的right更大的。代码如下(C++):

class Solution {
public:vector<vector<int>> merge(vector<vector<int>>& intervals) {if(intervals.size() == 0)return intervals;sort(intervals.begin(), intervals.end()); //排序,左端点升序vector<vector<int>> ans; //最终无重叠的区间数组for(int i = 0; i < intervals.size(); i++){//对于第一个区间和不重叠的区间,直接加入if(ans.size() ==0 || ans.back()[1] < intervals[i][0])ans.emplace_back(intervals[i]);else//有重叠的区间,最后一个区间的right要修改为两个重叠区间更大的rightans.back()[1] = max(intervals[i][1], ans.back()[1]);}return ans;}
};

57. 插入区间

题目链接:57. 插入区间
题目内容:
在这里插入图片描述
这道题其实和上一题是差不多的。给的区间已经按照左端点排序好了,先查找到待插入的区间应该插入的位置,然后插入再合并重叠的区间即可。如果一个区间d.right < newin.left的话,很显然这个区间d是和newin是不重叠的,在其左边;如果一个区间d.left > newin.right的话,很显然这个区间d在其右边,是不重叠的。除上述两种情况外,那就是有重叠的部分,和一个区间重叠后,合并的区间left = min(newin.left,d.left),只有第一个开始重叠的地方需要更新left,之后right = max(newin.right,d.right)。以下例举了部分情况:
在这里插入图片描述
实际上还有在最前面、最后面插入的情况,不需要额外讨论,一样按照上述三种情况去判断就好了,最前面和最后面只是插入的位置和重叠位置有些特殊。实现代码如下(C++):

class Solution {
public:vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {vector<vector<int>> ans;int idx = 0;//先把在插入区间左边的区间直接加入答案数组中while(idx < intervals.size() && intervals[idx][1] < newInterval[0]){ans.emplace_back(intervals[idx]);idx++;}//如果已经在最后了或者是空的,直接插入if(idx == intervals.size()) {ans.emplace_back(newInterval);return  ans;}//否则idx对应的区间和待插入区间是有重叠的,更新leftelse{newInterval[0] = min(intervals[idx][0], newInterval[0]);}//开始查找重叠部分,直到找到在待插入区间右边的区间while(idx < intervals.size() && intervals[idx][0] <= newInterval[1]){   //有重叠就更新right         newInterval[1] = max(intervals[idx][1], newInterval[1]);   idx++;             }   //插入区间ans.emplace_back(newInterval);//之后的区间全在待插入区间的右边,直接加入while(idx < intervals.size())ans.emplace_back(intervals[idx++]);return ans;}
};

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

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

相关文章

使用Docker安装和部署kkFileView

&#x1f388;1 参考文档 kkFileView官方文档 &#x1f680;2 安装kkFileView 拉取Redis镜像。 docker pull keking/kkfileview启动docker容器。 docker run -it -d -p 8012:8012 keking/kkfileview --restart always解释&#xff1a; docker run redis # 从kkfileview镜像运行…

『PyQt5-Qt Designer篇』| 08 Qt Designer中容器布局和绝对布局的使用

08 Qt Designer中容器布局和绝对布局的使用 1 容器布局1.1 设计容器布局1.2 保存文件并执行2 绝对布局2.1 设计绝对布局2.2 保存文件并执行1 容器布局 1.1 设计容器布局 先拖入一个容器Frame容器,然后拖入几个控件: 把拖入的控件拖入容器中: 选中容器,右键-布局-栅格布局:…

Python大数据处理利器之Pyspark详解

摘要&#xff1a; 在现代信息时代&#xff0c;数据是最宝贵的财富之一&#xff0c;如何处理和分析这些数据成为了关键。Python在数据处理方面表现得尤为突出。而pyspark作为一个强大的分布式计算框架&#xff0c;为大数据处理提供了一种高效的解决方案。本文将详细介绍pyspark…

docker安装elasticsearch、kibana

安装过程中&#xff0c;遇到最大的问题就是在安装kibana的时候发现 一直连接不上 elasticsearch。最后解决的问题就是 我通过 ifconfig en0 | grep inet| awk {print $2} 在mac中找到本机的ip&#xff0c;然后去到kibana容器中 修改 vi config/kibana.yml中的elasticsearch.hos…

leetcode做题笔记125. 验证回文串

如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后&#xff0c;短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。 字母和数字都属于字母数字字符。 给你一个字符串 s&#xff0c;如果它是 回文串 &#xff0c;返回 true &#xff1b;否则&#…

Redis 学习笔记

文章目录 一、简介二、下载三、安装四、启动和关闭五、配置文件六、常用指令七、安全加固 版权声明&#xff1a;本文为CSDN博主「杨群」的原创文章&#xff0c;遵循 CC 4.0 BY-SA版权协议&#xff0c;于2023年9月3日首发于CSDN&#xff0c;转载请附上原文出处链接及本声明。 原…

父组件调用子组件 ref 不生效?组件暴露 ref ?

向你的组件暴露 ref 要暴露 ref 最关键的就是 forwardRef forwardRef 是 React 中的一个高阶函数&#xff0c;用于在函数组件中将 ref 属性向下传递给子组件。 在 React 中&#xff0c;我们可以使用 ref 属性来获取对一个组件实例的引用&#xff0c;以便在父组件中操作子组件。…

Dynamic ReLU:根据输入动态确定的ReLU

这是我最近才看到的一篇论文&#xff0c;它提出了动态ReLU (Dynamic ReLU, DY-ReLU)&#xff0c;可以将全局上下文编码为超函数&#xff0c;并相应地调整分段线性激活函数。与传统的ReLU相比&#xff0c;DY-ReLU的额外计算成本可以忽略不计&#xff0c;但表示能力明显增强&…

项目(补充2):智慧教室

一。emWin环境的搭建 1.codeBlock下载 开源免费。 2.使用stm的Cubemx提供的作图软件 &#xff08;1&#xff09;在C盘下找到第三方的固件库&#xff0c;旁边有个ST文件夹 注意&#xff1a;我在下载cubemx为默认的路径 &#xff08;2&#xff09;STemWin中的Soft提供了绘图…

JavaScript:反转数组的四种方法

1.使用For循环反转数组&#xff1a; 我们将为这种方法使用递减循环&#xff0c;以迭代给定数组的每个元素。 数组的最后一个元素将是循环的起点(arr.length — 1) &#xff0c;它将一直运行直到到达数组的起点(i ≥ 0) var arr [1, 2, 3, 4, 5, 6, 7, 8, 9];function reverse…

一文1800字从0到1使用Python Flask实战构建Web应用

Python Flask是一个轻量级的Web框架&#xff0c;它简单易用、灵活性高&#xff0c;适用于构建各种规模的Web应用。本文将介绍如何使用Python Flask框架来实战构建一个简单的Web应用&#xff0c;并展示其基本功能和特性。 第一部分&#xff1a;搭建开发环境 在开始之前我们需要…

[CMake教程] 循环

目录 一、foreach()二、while()三、break() 与 continue() 作为一个编程语言&#xff0c;CMake也少不了循环流程控制&#xff0c;他提供两种循环foreach() 和 while()。 一、foreach() 基本语法&#xff1a; foreach(<loop_var> <items>)<commands> endfo…

企业架构LNMP学习笔记8

1、 运维人员需要考虑安全性、稳定性。 安装&#xff1a; 解压进入到目录&#xff1a; shell > tar zxf php-7.2.12.tar.gz shell > cd php-7.2.12 安装依赖软件&#xff1a; yum -y install libxml2-devel libjpeg-devel libpng-devel freetype-devel curl-devel op…

【100天精通Python】Day52:Python 数据分析_Numpy入门基础与数组操作

目录 1 NumPy 基础概述 1.1 NumPy的主要特点和功能 1.2 NumPy 安装和导入 2 Numpy 数组 2.1 创建NumPy数组 2.2 数组的形状和维度 2.3 数组的数据类型 2.4 访问和修改数组元素 3 数组操作 3.1 数组运算 3.2 数学函数 3.3 统计函数 4 数组形状操作 4.1 重塑数组形…

docker进阶作业

一、使用mysql:5.6和 owncloud 镜像&#xff0c;构建一个个人网盘。 安装Docker&#xff1a;确保已在CentOS 7.5上安装了Docker。 拉取MySQL 5.6镜像&#xff1a;使用以下命令从Docker Hub上拉取MySQL 5.6镜像。 docker pull mysql:5.6 运行MySQL容器&#xff1a;使用以下命令…

使用Windbg动态调试排查软件启动不了的问题

目录 1、问题说明 2、初步分析 3、使用Windbg启动程序进行动态调试 4、进一步分析 5、何时使用Windbg静态分析&#xff1f;何时使用Windbg进行动态调试&#xff1f; 6、最后 VC常用功能开发汇总&#xff08;专栏文章列表&#xff0c;欢迎订阅&#xff0c;持续更新...&…

Go在安装Gin时出现Failed to connect 报错问题的解决方案(已解决)

在命令行中输入&#xff1a;go get -u github.com/gin-gonic/gin指令安装Gin第三方包时出现连接错误与连接超时的情况如下&#xff1a; 在较新版本的Go中引入了全新的包管理机制&#xff0c;出现上述错误可能是包管理机制设置不恰当的问题&#xff0c;尝试在终端窗口输入如下…

解决Apache Tomcat “Request header is too large“ 异常 ‍

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

python数分实战探索霍尔特法之销售预测python代码实现以及预测图绘制

探索霍尔特法:时间序列预测中的线性趋势捕捉 时间序列分析是统计学和数据分析中的一个核心领域。无论是预测股票市场的走势,还是预测未来的销售量,一个精确和可靠的预测模型都是至关重要的。在众多的时间序列预测方法中,霍尔特法(Holts method)脱颖而出,特别是当我们面…

【数据结构】| 并查集及其优化实现

目录 一. 并查集基本概念处理过程初始化合并查询小结 二. 求并优化2.1 按大小求并2.2 按秩(高度)求并2.3 路径压缩2.4 类的实现代码2.5 复杂度分析 三. 应用LeetCode 128: 最长连续数列LeetCode 547: 省份数量LeetCode 200: 岛屿数量 一. 并查集基本概念 以一个直观的问题来引入…