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

算法-合并区间(56)

这道题可以用列表来写,首先对所有的数组区间依据第一个数字进行排序,然后创建一个数组列表存放合并重叠后的结果。

如果列表为空,或者当前区间的起始位置大于列表中区间的最后一个位置,则不重叠直接插入列表,否则合并区间。

这里合并起始位置不变,依据区间末尾最大的那个数作为结尾。

最后利用toArray方法,把列表转成二维数组输出。

代码如下:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;// 合并区间
public class Solution2 {public  int[][] merge(int[][] intervals) {//首先对区间按照起始位置进行排序Arrays.sort(intervals, Comparator.comparing(a->a[0]));List<int[]>merged=new ArrayList<>();//遍历排序后的区间for(int[] interval:intervals){//如果结果列表为空,或者当前区间的起始位置大于结果列表中最后一个区间的结束位置//则说明没有重叠,直接将当前区间添加到结果列表中if(merged.isEmpty()||merged.get(merged.size()-1)[1]<interval[0]){merged.add(interval);}else {//存在重叠需要合并区间merged.get(merged.size()-1)[1]=Math.max(merged.get(merged.size()-1)[1],interval[1]);}}//将结果列表转换成二维数组并返回return merged.toArray(new int[merged.size()][]);}
}

 1.比较器

Comparator.comparingInt(a -> a[0]) 创建了一个比较器,该比较器根据整数数组的第一个元素的值来比较两个整数数组。如果第一个数组的第一个元素小于第二个数组的第一个元素,则比较器认为第一个数组“小于”第二个数组(在排序的上下文中)。

2.区间比较

merged.get(merged.size()-1)[1] < interval[0]:这个条件判断语句的意思是,如果merged列表中最后一个区间的结束位置小于当前interval区间的起始位置,则条件为真。这种情况表明merged列表中的最后一个区间与interval区间没有重叠,因为它们的结束位置和起始位置之间有空隙。

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

相关文章:

  • 港科夜闻 | 叶玉如校长出席2024科技+新质生产力高峰论坛发表专题演讲,贡献国家科技强国战略...
  • 一文读懂IPv6v6地址的配置方式
  • 【设计模式】设计模式的八大原则
  • 【Github项目推荐】DataLoom
  • 重磅!布拉德皮特移居法国?据称与他和安吉丽娜朱莉生养的6个孩子有关!皮特一直为自己与孩子们如此亲近却又如此遥远而苦恼
  • .net MAUI应用生命周期
  • Nginx 安装教程
  • vue axios发送post请求跨域解决
  • MIT线性代数
  • 打工人自救指南!2024年数据恢复工具,清空回收站也能秒回数据
  • MyBatis 缓存机制
  • 10个神级Python自动化脚本助力轻松工作
  • EasyExcel模板导出与公式计算(下)
  • Golang序言全面学习-前序
  • Python世界:文件自动化备份实践
  • PTA 6-10 阶乘计算升级版(详讲)
  • 软件开发人员从0到1实现物联网项目:项目架构的思考
  • Java--集合进阶 Collection,迭代器,lambda表达式
  • STM32G474之DAC
  • 哈希表的底层实现(2)---C++版
  • 算法知识点————【LRU算法】
  • 记一次MySQL视图查询优化的经验
  • Cloudways搭建WordPress外贸独立站完整教程(1)
  • Delphi5数据控制组件——查询
  • git pull之后发现项目错误,如何回到之前的版本方法
  • 防跌倒识别摄像机
  • MyQql性能诊断与实践
  • 有序序列判断
  • 【Kubernetes知识点问答题】健康检查
  • 【Prometheus】PromQL数据类型以及常用的计算函数用法详解