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 considerred overlapping.
Tags: Array, Sort
题意是给你一组区间,让你把区间合并成没有交集的一组区间。我们可以把区间按 start
进行排序,然后遍历排序后的区间,如果当前的 start
小于前者的 end
,那么说明这两个存在交集,我们取两者中较大的 end
即可;否则的话直接插入到结果序列中即可。
/** * Definition for an interval. * public class Interval { * int start; * int end; * Interval() { start = 0; end = 0; } * Interval(int s, int e) { start = s; end = e; } * } */classSolution { publicList<Interval> merge(List<Interval> intervals) { if (intervals == null || intervals.size() <= 1) returnintervals; intervals.sort(newComparator<Interval>() { @Overridepublicintcompare(Intervalo1, Intervalo2) { if (o1.start < o2.start) return -1; if (o1.start > o2.start) return1; return0; } }); List<Interval> ans = newArrayList<>(); intstart = intervals.get(0).start; intend = intervals.get(0).end; for (Intervalinterval : intervals) { if (interval.start <= end) { end = Math.max(end, interval.end); } else { ans.add(newInterval(start, end)); start = interval.start; end = interval.end; } } ans.add(newInterval(start, end)); returnans; } }
如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:awesome-java-leetcode