首页 > 其他分享 >#yyds干货盘点# 面试必刷TOP101:合并区间

#yyds干货盘点# 面试必刷TOP101:合并区间

时间:2022-10-17 19:02:52浏览次数:44  
标签:yyds end res start intervals 区间 必刷 TOP101 o1

1.简述:

描述

给出一组区间,请合并所有重叠的区间。

请保证合并后的区间按区间起点升序排列。

数据范围:区间组数 ,区间内 的值都满足 

要求:空间复杂度 ,时间复杂度 

进阶:空间复杂度 ,时间复杂度

示例1

输入:

[[10,30],[20,60],[80,100],[150,180]]

返回值:

[[10,60],[80,100],[150,180]]


示例2

输入:

[[0,10],[10,20]]

返回值:

[[0,20]]

2.代码实现:

import java.util.*;
public class Solution {
public ArrayList<Interval> merge(ArrayList<Interval> intervals) {
ArrayList<Interval> res = new ArrayList<>();
//去除特殊情况
if(intervals.size() == 0)
return res;
//重载比较,按照区间首排序
Collections.sort(intervals, new Comparator<Interval>(){
public int compare(Interval o1, Interval o2){
if(o1.start != o2.start)
return o1.start - o2.start;
else
return o1.end - o2.end;
}
});
//放入第一个区间
res.add(intervals.get(0));
int count = 0;
//遍历后续区间,查看是否与末尾有重叠
for(int i = 1; i < intervals.size(); i++){
Interval o1 = intervals.get(i);
Interval origin = res.get(count);
if(o1.start > origin.end){
res.add(o1);
count++;
//区间有重叠,更新结尾
}else{
res.remove(count);
Interval s = new Interval(origin.start, o1.end);
if(o1.end < origin.end)
s.end = origin.end;
res.add(s);
}
}
return res;
}
}

标签:yyds,end,res,start,intervals,区间,必刷,TOP101,o1
From: https://blog.51cto.com/u_15488507/5763839

相关文章