输入: [(1,3)]输出: [(1,3)]输入: [(1,3),(2,6),(8,10),(15,18)]输出: [(1,6),(8,10),(15,18)]public class Solution { /** * @param intervals: interval list. * @return: A new interval list. */ public List<Interval> merge(List<Interval> intervals) { if (intervals.size() == 0) { return intervals; } // 根据区间的start值排序 intervals.sort(Comparator.comparing(i -> i.start)); List<Interval> result = new ArrayList<Interval>(); Interval lastInterval = intervals.get(0); // 如果两段区间有交集的话,合并两段区间 // 没有的话,将最后的区间加入答案,并令新的区间作为最后的区间 for (Interval interval: intervals) { if (haveIntercation(lastInterval, interval)) { lastInterval = mergeTwoIntervals(lastInterval, interval); } else { result.add(lastInterval); lastInterval = interval; } } result.add(lastInterval); return result; } // 合并两段区间 private Interval mergeTwoIntervals(Interval a, Interval b) { return new Interval(Math.min(a.start, b.start), Math.max(a.end, b.end)); } // 判断区间是否有交集,要满足较大的start小于等于较小的end private boolean haveIntercation(Interval a, Interval b) { return Math.max(a.start, b.start) <= Math.min(a.end, b.end); }}[leetcode/lintcode 题解] Google面试题:合并区间
原文:https://www.cnblogs.com/lintcode/p/13754877.html