题解 | #合并区间#
合并区间
https://www.nowcoder.com/practice/69f4e5b7ad284a478777cb2a17fb5e6a
import java.util.*;
/*
* public class Interval {
* int start;
* int end;
* public Interval(int start, int end) {
* this.start = start;
* this.end = end;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param intervals Interval类ArrayList
* @return Interval类ArrayList
*/
public ArrayList<Interval> merge(ArrayList<Interval> intervals) {
ArrayList<Interval> list = new ArrayList<>();
if (intervals == null || intervals.size() == 0) {
return list;
}
// 先根据每个区间的第一个元素,按照大小排序
intervals.sort(Comparator.comparingInt(o -> o.start));
Interval pre = null; // 上一个准入列区间
for (Interval interval : intervals) {
int start = interval.start;
int end = interval.end;
if (pre == null) {
// 第一个区间
pre = new Interval(start, end);
} else {
if (pre.end >= start) {
if (pre.end <= end) {
// 前一个区间的end值大于当前区间的start值时,且小于当前区间end值时,合并两个区间
pre.end = end;
}
} else {
list.add(pre);
pre = new Interval(start, end);
}
}
}
list.add(pre);
return list;
}
}
查看16道真题和解析