热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

“合并区间”问题解析及其思考

合并区间题目以数组intervals表示若干个区间的集合,其中单个区间为intervals[i][starti,endi]。请你合并所有重叠的区间,并返


合并区间

题目

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

解析

本题思路相对比较容易想

  1. 先对各个区间按左边界从小到大进行排序


  1. 顺序对重叠区间进行聚合


  1. 第一个作为基准


  1. 从第二个开始,比较区间左边界是否小于等于基准区间的有边界,若符合,则说明两个区间有重叠,可以聚合,也就是说两者的右边界,哪个大选哪个作为基准区间的右边界。


  1. 以此类推,直到不符合条件,则第一个聚合区间形成。并把当前区间作为基准区间再从第一步重新开始执行

但是这个题目在编码的时候会遇到几个基础的编码知识,比较容易遗忘。

对二维数组进行排序

我们知道对一维数组int[] a进行排序的话,可以使用Arrays.sort(a)完成。但是二维数组呢?

二维数组可以用该函数的重载函数 sort(T[] a, Comparator c),通过指定要比较哪个字段,就可以实现对二维数组的排序了。

list中装数组

List list = new ArrayList(); 大家见过吗?不管见没见过,这样的写法都是没问题的,因为数组也是一个对象,可以放在list中。

List转化为数组

List list 想转化为list,就可以通过list.toArray()方法直接转化为二维数组。

代码实现

publicint[][] merge(int[][] intervals) {

if (intervals.length==0) {

returnnewint[0][2];

}

if(intervals.length==1) {

returnintervals;

}

//这里是对二维数组按左边界排序

Arrays.sort(intervals, newComparator() {

publicintcompare(int[] interval1, int[] interval2) {

returninterval1[0] -interval2[0];

}

});

//把数组装到list中

Listmerged=newArrayList();

intstart=intervals[0][0];

intend =intervals[0][1];

for (inti=0; i

while (++i

if (intervals[i][0] >end) {

break;

}

end=Math.max(end, intervals[i][1]);

}

merged.add(newint[]{start, end});

if (i==intervals.length) {

break;

}

start=intervals[i][0];

end=intervals[i][1];

}

//list转为二维数组

returnmerged.toArray(newint[merged.size()][]);

}





推荐阅读
  • 本文介绍了如何利用OpenCV库进行图像的边缘检测,并通过Canny算法提取图像中的边缘。随后,文章详细说明了如何识别图像中的特定形状(如矩形),并应用四点变换技术对目标区域进行透视校正。 ... [详细]
  • 本文详细介绍了 Redis 中的主要数据类型,包括 String、Hash、List、Set、ZSet、Geo 和 HyperLogLog,并提供了每种类型的基本操作命令和应用场景。 ... [详细]
  • ArcBlock 发布 ABT 节点 1.0.31 版本更新
    2020年11月9日,ArcBlock 区块链基础平台发布了 ABT 节点开发平台的1.0.31版本更新,此次更新带来了多项功能增强与性能优化。 ... [详细]
  • 深入解析 C++ 中的 String 和 Vector
    本文详细介绍了 C++ 编程语言中 String 和 Vector 的使用方法及特性,旨在帮助开发者更好地理解和应用这两个重要的容器。 ... [详细]
  • 本笔记记录了几个典型的 LeetCode 编程题目及其解决方案,包括使用两个栈实现队列、计算斐波那契数列、青蛙跳台阶问题以及寻找旋转排序数组中的最小值。 ... [详细]
  • 本文探讨了Python类型注解使用率低下的原因,主要归结于历史背景和投资回报率(ROI)的考量。文章不仅分析了类型注解的实际效用,还回顾了Python类型注解的发展历程。 ... [详细]
  • 本文详细探讨了 TensorFlow 中 `tf.identity` 函数的作用及其应用场景,通过对比直接赋值与使用 `tf.identity` 的差异,帮助读者更好地理解和运用这一函数。 ... [详细]
  • hlg_oj_1116_选美大赛这题是最长子序列,然后再求出路径就可以了。开始写的比较乱,用数组什么的,后来用了指针就好办了。现在把代码贴 ... [详细]
  • td{border:1pxsolid#808080;}参考:和FMX相关的类(表)TFmxObjectIFreeNotification ... [详细]
  • 本文详细介绍如何在SSM(Spring + Spring MVC + MyBatis)框架中实现分页功能。包括分页的基本概念、数据准备、前端分页栏的设计与实现、后端分页逻辑的编写以及最终的测试步骤。 ... [详细]
  • 深入解析Unity3D游戏开发中的音频播放技术
    在游戏开发中,音频播放是提升玩家沉浸感的关键因素之一。本文将探讨如何在Unity3D中高效地管理和播放不同类型的游戏音频,包括背景音乐和效果音效,并介绍实现这些功能的具体步骤。 ... [详细]
  • 1、编写一个Java程序在屏幕上输出“你好!”。programmenameHelloworld.javapublicclassHelloworld{publicst ... [详细]
  • 视觉Transformer综述
    本文综述了视觉Transformer在计算机视觉领域的应用,从原始Transformer出发,详细介绍了其在图像分类、目标检测和图像分割等任务中的最新进展。文章不仅涵盖了基础的Transformer架构,还深入探讨了各类增强版Transformer模型的设计思路和技术细节。 ... [详细]
  • D17:C#设计模式之十六观察者模式(Observer Pattern)【行为型】
    一、引言今天是2017年11月份的最后一天,也就是2017年11月30日,利用今天再写一个模式,争取下个月(也就是12月份& ... [详细]
  • 基于SSM框架的在线考试系统:随机组卷功能详解
    本文深入探讨了基于SSM(Spring, Spring MVC, MyBatis)框架构建的在线考试系统中,随机组卷功能的设计与实现方法。 ... [详细]
author-avatar
小猪猫猫晓
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有