java将两个区间范围合并_【LeetCode-java实现】56. Merge Intervals合并区间

56. Merge Intervals合并区间

题目描述

Given a collection of intervals, merge all overlapping intervals.

Example 1:

Input: [[1,3],[2,6],[8,10],[15,18]]

Output: [[1,6],[8,10],[15,18]]

Explanation: Since intervals [1,3] and [2,6] overlaps, merge them into [1,6].

Example 2:

Input: [[1,4],[4,5]]

Output: [[1,5]]

Explanation: Intervals [1,4] and [4,5] are considered overlapping.

思路

先按每个区间第一个元素进行升序排序:使用lambda函数

创建一个list来存放得到的合并区间(最后再转换成二维数组)

再遍历所有区间,比较当前遍历的区间的结尾和下一个区间的开头:

若当前结尾>=下一个开头:需要覆盖区间,得到的合并区间结尾是两个区间中结尾更大的那个

若当前结尾

最终把list转换成二维数组,并返回该二维数组

实现

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

//特殊情况:没有区间或只有一个区间,不需要合并

if(intervals.length<2) return intervals;

//先按每个区间第一个元素进行升序排序:使用lambda函数

Arrays.sort(intervals,(i1,i2)->Integer.compare(i1[0],i2[0]));

//先用list存放合并的区间(最后转换成二维数组)

List res = new ArrayList<>();

//newInterval是对比当前区间结尾和下一个区间开头后,合并得到的区间(初始是第一个区间)

int[] newInterval = intervals[0];

res.add(newInterval); //第一个区间不需要合并,直接放进list

//遍历所有区间,比较当前区间结尾和下一区间开头,判断是否需要合并

//简单遍历法

for (int[] interval : intervals) { //interval[i]代表第i+1个区间

if (interval[0] <= newInterval[1]) // 若后一个区间的开头<=当前区间的结尾,覆盖区间(0下标代表区间开头,1代表结尾)

newInterval[1] = Math.max(newInterval[1], interval[1]);

else { // 若后一个区间开头>当前区间结尾,不需要覆盖,直接把当前区间加入到List

newInterval = interval;

res.add(newInterval);

}

}

return res.toArray(new int[res.size()][]); //list转换成二维数组

}

标签:newInterval,java,结尾,res,56,list,Merge,intervals,区间

来源: https://blog.csdn.net/chao_ji_cai/article/details/95855837

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值