当前位置: 首页 > news >正文

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

合并区间

题目

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

解析

本题思路相对比较容易想

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

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

  1. 第一个作为基准

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

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

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

对二维数组进行排序

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

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

list中装数组

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

List转化为数组

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

代码实现

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

if (intervals.length==0) {

returnnewint[0][2];

}

if(intervals.length==1) {

returnintervals;

}

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

Arrays.sort(intervals, newComparator<int[]>() {

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

returninterval1[0] -interval2[0];

}

});

//把数组装到list中

List<int[]>merged=newArrayList();

intstart=intervals[0][0];

intend =intervals[0][1];

for (inti=0; i<intervals.length;) {

while (++i<intervals.length) {

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()][]);

}

http://www.lryc.cn/news/10688.html

相关文章:

  • 2023年理想新能源汽车核心部件解密
  • C++ 将一个vector内容赋值给另一个vector,及swap与assign的区别
  • PMP的价值有哪些?
  • OnGUI label 控件||Unity 3D GUI教程||OnGUI Background Color 控件
  • 从 JavaScript 中的数组中删除空对象
  • 【C++】AVL树和红黑树(插入和测试详解)
  • Centos7 安装 Mysql 8.0.32,详细完整教程(好文章!!)
  • Apache Beanutils为什么被禁止使用?
  • sql server执行md5加密的时候,字符串前带N和不带N的结果是不一样的
  • 01Python编译器和编辑器下载
  • CHAPTER 5 自动发现、自动注册、分布式监控、SNMP监控
  • P5311 [Ynoi2011] 成都七中
  • Python 日期和时间格式
  • 电脑和手机的软件推荐
  • 酸回收树脂的应用
  • windows上配置IIS全过程
  • 软考高级信息系统项目管理师系列之十三:项目成本管理
  • HIVE 基础(一)
  • 《狂飙》壁纸太帅,Python自动切换太酷(8)
  • 博客排名的影响是什么? 说明优点、注册方法和推荐网站
  • 全流程GMS地下水数值模拟技能培养及溶质运移反应问题深度解析实践技术
  • 【软件架构设计】SOA/软件架构设计---面向服务的架构(SOA详细解释)
  • erupt框架Ueditor富文本编辑器图片上传出现405异常
  • FILE文件操作
  • SAP PP工单确认完成(CNF)状态取消方法
  • Python 采集 筷 实现视频批量保存
  • 关于linux下环境配置遇到的坑
  • 【Azure 架构师学习笔记】-Azure Logic Apps(7)- 自定义Logic Apps 调度
  • ubuntu20.04配置UR机械臂的仿真环境
  • 雅利安人覆灭了世界三大文明,为何单单在商朝被斩首两万?