题解 | #合并区间#
合并区间
https://www.nowcoder.com/practice/69f4e5b7ad284a478777cb2a17fb5e6a
import java.util.*; import java.util.stream.Collectors; /* * 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) { // write code here ArrayList<Interval> ans = new ArrayList<>(); // 先排序 List<Interval> sorted = intervals.stream().sorted(Comparator.comparingInt( o -> o.start)).collect(Collectors.toList()); for (Interval interval : sorted) { int start = interval.start, end = interval.end; // 如果是刚开始或左端点 left 大于已合并ans中最右边的的右端点,说明不重叠,直接加入ans if (ans.isEmpty() || ans.get(ans.size() - 1).end < start) { ans.add(new Interval(start, end)); } else { // 否则的话,更新 ans 中最后一个数组的右端点为两者中的最大值 ans.get(ans.size() - 1).end = Math.max(ans.get(ans.size() - 1).end, end); } } return ans; } }