题目:以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。

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

输出:[[1,6],[8,10],[15,18]]

解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6]


这个题的目标是合并所有重叠的区间。解题思路是,先把数组的元素进行排序,再合并区间。

为什么要排序呢?因为将区间按照起始元素排序,才能让我们非常清晰地识别重叠的区间。

排序:首先,根据每个区间的起始元素对区间进行排序(按照首元素从小到大排)。

合并:然后,遍历排序后的区间列表,检查当前区间是否与前一个区间重叠。 如果重叠,合并这两个区间;如果不重叠,将当前区间添加到结果列表中。

具体步骤:

  1. 排序:使用 Arrays.sort 方法对区间进行排序,排序的依据是每个区间的起始元素大小。

  2. 合并:使用一个 LinkedList 来存储合并后的区间。遍历排序后的区间列表,对于每个区间,检查它是否与 LinkedList 中最后一个区间重叠。如果重叠,合并这两个区间;如果不重叠,将当前区间添加到 LinkedList 中。

  3. 返回结果:将 LinkedList 转换为数组并返回。

我的Java代码:

class Solution {
public int[][] merge(int[][] intervals) {
if (intervals.length <= 1) {
return intervals;
} // 按照首元素对区间进行排序。 lambda 表达式定义排序的规则:首元素小的区间排在前面。
Arrays.sort(intervals, (a, b) -> a[0] - b[0]); LinkedList<int[]> merged = new LinkedList<>();
merged.add(intervals[0]);
int length = intervals.length; for (int i = 1; i < length; i++) {
int[] current = intervals[i];
int[] lastMerged = merged.getLast(); // 检查当前区间是否与最后一个合并的区间重叠
if (current[0] <= lastMerged[1]) {
// 合并区间
lastMerged[1] = Math.max(lastMerged[1], current[1]);
} else {
// 不重叠,将当前区间添加到结果列表中
merged.add(current);
}
} return merged.toArray(new int[merged.size()][]);
}
}

Java 解算法:合并区间的更多相关文章

  1. Java经典算法四十例编程详解+程序实例

    JAVA经典算法40例 [程序1]   题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?   1.程 ...

  2. Java实现 蓝桥杯 算法训练 区间k大数

    算法训练 区间k大数查询 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个. 输入格式 第一行包含一个数n,表示序列长度. 第二 ...

  3. Java与算法之(11) - 合并排序

    天下事,合久必分,分久必合.合并排序的基本思想正是先分再合. 例如对3, 1这个数列排序,首先是分,分为3和1两个数列,然后再合并并排序.合并需要额外的辅助空间,即建立一个两个数列长度之和的空数组用于 ...

  4. C#与java中的AES加解密互解算法

    一.C#版AES加解密算法 public class AESCode { public string Key { get; set; } public string Encrypt(string va ...

  5. Java实现 LeetCode 56 合并区间

    56. 合并区间 给出一个区间的集合,请合并所有重叠的区间. 示例 1: 输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: ...

  6. 【LeetCode】数组--合并区间(56)

    写在前面   老粉丝可能知道现阶段的LeetCode刷题将按照某一个特定的专题进行,之前的[贪心算法]已经结束,虽然只有三个题却包含了简单,中等,困难这三个维度,今天介绍的是第二个专题[数组] 数组( ...

  7. [LeetCode] Merge Intervals 合并区间

    Given a collection of intervals, merge all overlapping intervals. For example, Given [1,3],[2,6],[8, ...

  8. 使用Java练习算法常用的基本操作

    一.使用Java练习算法常常需要使用控制台的数据输入和输出,下面记录一下基本的使用方法: 基本用法 import java.util.*; public class Main { public sta ...

  9. JAVA经典算法40题及解答

    JAVA经典算法40题 [程序1]   题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分 ...

  10. JAVA经典算法40题

    1: JAVA经典算法40题 2: [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 3 ...

随机推荐

  1. vue3 基础-组件间传值及校验

    本篇讲基于对页面组件化拆分后, 组件之间如何进行数据传递, 通常是父组件如何给子组件进行传值, 子组件接收并进行数据校验后再使用. 父子组件传值 <!DOCTYPE html> <h ...

  2. C#/.NET/.NET Core技术前沿周刊 | 第 37 期(2025年5.1-5.11)

    前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录.追踪C#/.NET/.NET Core领域.生态的每周最新.最实用.最有价值的技术文章.社区动态.优质项目和学习资源等. ...

  3. ASP.NET Core之Razor Page相关

    cshtml一般是这样: @page @model IndexModel @{ ViewData["Title"] = "Home page"; } <d ...

  4. uni-app项目从0-1基础架构搭建全流程

    前情 最近新接了一个全新项目,我负责从0开始搭建小程序,我选用的技术栈是uni-app技术栈,UI库选择的是uview-plus,CSS引入现在流行的tainlwindcss,实现CSS原子化书写,实 ...

  5. C#线程池核心技术:从原理到高效调优的实用指南

    1. 引言 在现代软件开发中,多线程编程是提升应用程序性能的关键手段.随着多核处理器的普及,合理利用并发能力已成为开发者的重要课题.然而,线程的创建和销毁是一个昂贵的过程,涉及系统资源的分配与回收,频 ...

  6. 从零开发Vim-like编辑器(01)起步

    前言 Vim和Neovim因其独特的模态编辑和高度可定制化,被列为程序员常用的文本编辑器选项之一,与Sublime Text.VS Code.Emacs等编辑器共同丰富了开发者工具生态.就目前而言,网 ...

  7. MySQL-Canal-Kafka数据复制详解

    摘要 MySQL被广泛用于海量业务的存储数据库,在大数据时代,我们亟需对其中的海量数据进行分析,但在MySQL之上进行大数据分析显然是不现实的,这会影响业务系统的运行稳定.如果我们要实时地分析这些数据 ...

  8. AES256加密解密

    REPORT zged_aes. DATA lv_message_string TYPE string. DATA lv_message_decrypted TYPE XSTRING. " ...

  9. PI Errors and possible solutions

    引自:https://wiki.scn.sap.com/wiki/display/ERPHCM/PI+Errors+and+possible+solutions 转至元数据起始   404 - Not ...

  10. 基于 Paimon 的袋鼠云实时湖仓入湖实战剖析

    在当今数据驱动的时代,企业对数据的实施性能力提出了前所未有的高要求.为了应对这一挑战,构建高效.灵活且可扩展的实时湖仓成为数字化转型的关键.本文将深入探讨袋鼠云数栈如何通过三大核心实践--ChunJu ...