Leetcode 每日一题 56.合并区间

目录

问题描述

示例

示例 1

示例 2

问题分析

算法设计

步骤 1:排序

步骤 2:合并区间

步骤 3:返回结果

过题图片

代码实现

复杂度分析

题目链接

结语


问题描述

给定一个区间数组 intervals,其中每个区间由两个整数 startend 组成,表示区间的起始和结束位置。任务是合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。

示例

示例 1

  • 输入:intervals = [[1,3],[2,6],[8,10],[15,18]]
  • 输出:[[1,6],[8,10],[15,18]]

示例 2

  • 输入:intervals = [[1,4],[4,5]]
  • 输出:[[1,5]]

问题分析

要解决这个问题,我们需要找到所有重叠的区间并将它们合并。一个直观的方法是按照区间的起始位置对区间进行排序,然后逐个检查每个区间是否与前一个区间重叠。如果重叠,我们就合并它们;如果不重叠,我们就将当前区间添加到结果数组中。

算法设计

步骤 1:排序

首先,我们需要对区间数组进行排序,排序依据是区间的起始位置。这可以通过使用 Java 的 Arrays.sort 方法和自定义的比较器来实现。

步骤 2:合并区间

接下来,我们遍历排序后的区间数组,并使用一个列表来存储合并后的区间。对于每个区间,我们检查它是否与列表中最后一个区间重叠。如果它们不重叠(即当前区间的起始位置大于列表中最后一个区间的结束位置),我们就将当前区间添加到列表中。如果它们重叠,我们就更新列表中最后一个区间的结束位置,使其成为当前区间和列表中最后一个区间结束位置的最大值。

步骤 3:返回结果

最后,我们将列表转换为数组并返回,这就是合并后不重叠的区间数组。

过题图片

代码实现

以下是使用 Java 语言实现的代码:

 

java

import java.util.Arrays;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;class Solution {public int[][] merge(int[][] intervals) {// 步骤 1:排序Arrays.sort(intervals, Comparator.comparingInt(o -> o[0]));// 步骤 2:合并区间List<int[]> res = new ArrayList<>();for (int[] interval : intervals) {if (res.isEmpty() || res.get(res.size() - 1)[1] < interval[0]) {// 如果列表为空或者当前区间不与最后一个区间重叠,添加到列表res.add(interval);} else {// 如果重叠,合并区间res.get(res.size() - 1)[1] = Math.max(res.get(res.size() - 1)[1], interval[1]);}}// 步骤 3:返回结果return res.toArray(new int[res.size()][]);}
}

复杂度分析

  • 时间复杂度:O(n log n),其中 n 是区间的数量。主要时间消耗在排序上。
  • 空间复杂度:O(n),用于存储合并后的区间数组。

题目链接

56. 合并区间 - 力扣(LeetCode)

结语

合并区间问题是一个经典的算法问题,它考察了对数组操作和排序算法的理解和应用。以下是解决这类问题的一般步骤和策略:

  1. 理解问题:首先要清楚地理解问题的要求,即合并所有重叠的区间,并确保合并后的区间覆盖所有原始区间。明确输入和输出的格式。

  2. 排序:大多数情况下,解决合并区间问题的第一步是对区间进行排序。通常根据区间的起始位置进行排序,这样可以使得重叠的区间在数组中相邻,便于后续处理。

  3. 遍历合并:排序完成后,遍历排序后的区间数组,使用一个额外的数据结构(如列表)来存储合并后的区间。对于每个区间,判断它是否与前一个合并区间重叠。如果重叠,更新合并区间的结束位置;如果不重叠,将当前区间添加到结果中。

  4. 处理边界情况:在遍历过程中,要注意处理边界情况,比如当结果列表为空时,直接添加第一个区间;当当前区间不与前一个区间重叠时,也需要将当前区间添加到结果列表中。

  5. 返回结果:遍历完成后,将存储合并区间的列表转换为所需的输出格式(如数组),并返回。

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

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

相关文章

Oceanbase离线集群部署

准备工作 两台服务器 服务器的配置参照官网要求来 服务器名配置服务器IPoceanbase116g8h192.168.10.239oceanbase216g8h192.168.10.239 这里选oceanbase1作为 obd机器 oceanbase安装包 选择社区版本的时候自己系统的安装包 ntp时间同步rpm包 联网机器下载所需的软件包 …

Bert的Transformer原理

多义词如何应对&#xff1a; 答&#xff1a;通过Self attention&#xff0c;不同的上下文&#xff0c;对同一个"苹果"&#xff0c;得到截然不同的embedding激活值&#xff1b; Multi-head的作用&#xff1a; 有些类似CNN里用的多个卷积核得到多个Channel的特征图&…

AIDD-人工智能药物设计-化学自然语言引导的扩散式类药分子编辑:DiffIUPAC的魔法之旅

J. Pharm. Anal. | 化学自然语言引导的扩散式类药分子编辑&#xff1a;DiffIUPAC的魔法之旅 AIDD药研. 制药工程和生命科学背景&#xff0c;重点关注于计算机辅助药物设计&#xff08;CADD&#xff09;/药物筛选、分子动力学模拟MD&#xff0c;兽药信息学VetInformatics&…

ThinkPHP+Layui开发的ERP管理系统

ERP采购生产销售系统&#xff0c;一款基于ThinkPHPLayui开发的ERP管理系统&#xff0c;帮助中小企业实现ERP管理规范化&#xff0c;此系统能为你解决五大方面的经营问题&#xff1a;1.采购管理 2.销售管理 3.仓库管理 4.资金管理 5.生产管理&#xff0c;适用于&#xff1a;服装…

Elasticsearch:使用 Elastic APM 监控 Android 应用程序

一、前言 人们通过私人和专业的移动应用程序在智能手机上处理越来越多的事情。 拥有成千上万甚至数百万的用户&#xff0c;确保出色的性能和可靠性是移动应用程序和相关后端服务的提供商和运营商面临的主要挑战。 了解移动应用程序的行为、崩溃的发生和类型、响应时间慢的根本…

杂发单的单据类型一个参数的逻辑

【核准中可改】被产线滥用了。它们可以这样做&#xff0c;开立一张杂发单&#xff0c;打印出来交领导层签名。单据要交财务做核算的。然后去修改杂发单的材料。以为可以瞒天过海。2个仓库&#xff0c;一个中掉坑里&#xff0c;一个发现了它们的拙劣的手段&#xff0c;上报之后没…

事务的介绍(spring)

什么是事务&#xff1a; 事务是一组操作的集合&#xff0c;是不可分割的操作。比如一系列sql语句在一个操作中执行&#xff0c;要么成功要么失败。 比如在转账的时候&#xff0c;a钱包-100&#xff0c;b钱包100&#xff0c;两个要么同时成功要么同时失败。 &#xff08;复习&a…

CSS一些小点 —— 12.7

1. box-sizing: border-box box-sizing 属性&#xff0c;默认值为 content-box box-sizing: border-box 使padding和border的值不会再影响元素的宽高&#xff1b;padding和border的值算在指定宽高的内部&#xff08;但是外边距依然算做外部&#xff09; 2. overflow: hidden …

51c嵌入式~单片机合集3

我自己的原文哦~ https://blog.51cto.com/whaosoft/12581900 一、STM32代码远程升级之IAP编程 IAP是什么 有时项目上需要远程升级单片机程序&#xff0c;此时需要接触到IAP编程。 IAP即为In Application Programming&#xff0c;解释为在应用中编程&#xff0c;用户自己的程…

将军令游戏源码(​全套源代码+数据库+全套工具+客户端+服务端)

将军令游戏源码&#xff08;​全套源代码数据库全套工具客户端服务端&#xff09; 下载地址&#xff1a; 通过网盘分享的文件&#xff1a;【源码】将军令游戏源码&#xff08;全套源代码数据库全套工具客户端服务端&#xff09; 链接: https://pan.baidu.com/s/1A5oOn7NsDU1woH…

渐冻症患者的饮食希望:五种食物带来的可能

渐冻症&#xff0c;一个令人胆寒的医学难题。目前&#xff0c;全球约有 50 万渐冻症患者&#xff0c;这个数字还在不断增长。渐冻症会逐渐剥夺患者的行动能力、语言能力&#xff0c;甚至呼吸能力&#xff0c;给患者及其家庭带来沉重的打击。然而&#xff0c;有传言称 “渐冻症最…

文件IO——01

1. 认识文件 1&#xff09;文件概念 “文件”是一个广义的概念&#xff0c;可以代表很多东西 操作系统里&#xff0c;会把很多的硬件设备和软件资源抽象成“文件”&#xff0c;统一管理 但是大部分情况下的文件&#xff0c;都是指硬盘的文件&#xff08;文件相当于是对“硬…

安装 pytorch lighting

1 搜寻配对版本 进入lighting官网&#xff0c;查看配对版本 比如我就选择Python3.11、torch2.4、lightning2.4.0 2 搜寻pytorch安装命令 进入pytorch官网&#xff0c;查看以前版本的下载命令 注意要选择是 gpu版本的pytorch查看自己显卡驱动命令&#xff1a;nvidia-smi查看…

2030. gitLab A仓同步到B仓

文章目录 1 A 仓库备份 到 B 仓库2 B 仓库修改main分支的权限 1 A 仓库备份 到 B 仓库 #!/bin/bash# 定义变量 REPO_DIR"/home/xhome/opt/git_sync/zz_xx_xx" # 替换为你的本地库A的实际路径 REMOTE_ORIGIN"http://192.168.1.66:8181/zzkj_software/zz_xx_xx.…

在GITHUB上传本地文件指南(详细图文版)

这份笔记简述了如何在GITHUB上上传文件夹的详细策略。 既是对自己未来的一个参考&#xff0c;又希望能给各位读者带来帮助。 详细步骤 打开目标文件夹&#xff08;想要上传的文件夹&#xff09; 右击点击git bash打开 GitHub创立新的仓库后&#xff0c;点击右上方CODE绿色按…

[每周一更]-(第126期):MQ解耦场景

消息队列&#xff08;MQ&#xff09;解耦是一种软件架构设计模式&#xff0c;主要通过中间件将系统中的生产者和消费者模块分离&#xff0c;减少模块之间的直接依赖&#xff0c;使系统具有更高的扩展性和灵活性。这种模式尤其适用于需要处理复杂业务逻辑、频繁请求或异步处理的…

学习Python的笔记--面向对象-继承

1、概念 多个类之间的所属关系&#xff0c;即子类默认继承父类的所有属性和方法。 注&#xff1a;所有类默认继承object类&#xff0c;object类是顶级类或基类&#xff1b; 其他子类叫做派生类。 #父类A class A(object):def __init__(self):self.num1def info_print(self)…

操作系统基本管理

操作系统基本原理 计算机的操作地位 文件系统 若某文件系统的目录结构如下图所示,假设用户要访问文件rw.dll&#xff0c;且当前工作目录为 stools 三态模型 进程管理 位示图 &#xff08;23&#xff09;4096/321129 &#xff08;24&#xff09;200*1024/1/326400 PV操作&a…

基于框架的逻辑回归:原理、实现与应用

目录 ​编辑 逻辑回归原理 损失函数与优化 正则化 基于框架的实现 1. 数据预处理 2. 模型初始化与训练 3. 模型评估与调优 4. 特征缩放 逻辑回归的应用 信用评分 医疗诊断 垃圾邮件识别 推荐系统 结论 在机器学习领域&#xff0c;逻辑回归是一种基础且强大的分类…

对 JavaScript 说“不”

JavaScript编程语言历史悠久&#xff0c;但它是在 1995 年大约一周内创建的。 它最初被称为 LiveScript&#xff0c;但后来更名为 JavaScript&#xff0c;以赶上 Java 的潮流&#xff0c;尽管它与 Java 毫无关系。 它很快就变得非常流行&#xff0c;推动了 Web 应用程序革命&…