【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…

父组件调用子组件 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提供了绘图…

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

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

企业架构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 重塑数组形…

使用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; 文章图文…

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

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

差分数组/前缀和

文章目录 1094. 拼车1109. 航班预定统计303. 区域和检索 - 数组不可变560. 和为K的子数组523. 连续的子数组的和 1094. 拼车 class Solution {public boolean carPooling(int[][] trips, int capacity) {int[] diff new int[1001]; // 记录每个站点改变的人数&#xff0c;比如…

无涯教程-JavaScript - WEIBULL函数

WEIBULL函数取代了Excel 2010中的WEIBULL.DIST函数。 描述 该函数返回威布尔分布。在可靠性分析中使用此分布,如计算设备的平均故障时间。 语法 WEIBULL(x,alpha,beta,cumulative)争论 Argument描述Required/OptionalXThe value at which to evaluate the function.Requir…

selenium可以编写自动化测试脚本吗?

Selenium可以用于编写自动化测试脚本&#xff0c;它提供了许多工具和API&#xff0c;可以与浏览器交互&#xff0c;模拟用户操作&#xff0c;检查网页的各个方面。下面是一些步骤&#xff0c;可以帮助你编写Selenium自动化测试脚本。 1、安装Selenium库和浏览器驱动程序 首先…

stable diffusion实践操作-常见lora模型介绍

系列文章目录 本文专门开一节写Lora相关的内容&#xff0c;在看之前&#xff0c;可以同步关注&#xff1a; stable diffusion实践操作 文章目录 系列文章目录前言一、什么是lora?1.1 lora 定义1.2 lora的基本原理1.2 通过分层控制lora 二、作用&#xff1a;2.1 复刻人物特征2…

C++实现蜂群涌现效果(flocking)

Flocking算法0704_元宇宙中的程序员的博客-CSDN博客 每个个体的位置&#xff0c;通过计算与周围个体的速度、角度、位置&#xff0c;去更新位置。

Linux系统编程5(线程概念详解)

线程同进程一样都是OS中非常重要的部分&#xff0c;线程的应用场景非常的广泛&#xff0c;试想我们使用的视频软件&#xff0c;在网络不是很好的情况下&#xff0c;通常会采取下载的方式&#xff0c;现在你很想立即观看&#xff0c;又想下载&#xff0c;于是你点击了下载并且在…

【多线程】线程间通信及状态

文章目录 1. 线程间的通信1.1 wait和notify1.2 notify随机唤醒1.3 notifyAll()1.4 join() 2. 线程间的状态3. 验证线程的状态3.1 验证NEW、RUNNABLE、TERMINATED3.2 验证WAITING3.3 验证TIMED-WAITING3.4 验证BLOCKED 4. 面试题&#xff1a;wait和sleep对比 1. 线程间的通信 1…