56. Merge Intervals
一、题目
1、审题
2、分析
给出一个装有间隔数字的数组组成的 List(List中数组是无序的),将有重叠部分的数组进行合并。
二、解答
1、思路:
先将 List 中数组根据 start 进行排序,再依次判断是否有重叠(比较前一个的 end 与后一个的 start),再进行合并。
/** * 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; } * } */ class Solution { public List<Interval> merge(List<Interval> intervals) { if(intervals.size() <= 1) return intervals; // 将 intervals 根据 start 排序 Collections.sort(intervals, new Comparator<Interval>() { @Override public int compare(Interval o1, Interval o2) { return o1.start - o2.start; } }); List<Interval> resultList = new LinkedList<>(); int start = intervals.get(0).start; int end = intervals.get(0).end; for(Interval interval: intervals) { if(interval.start <= end) // 有重叠 end = Math.max(end, interval.end); else { // 无重叠 resultList.add(new Interval(start, end)); start = interval.start; end = interval.end; } } resultList.add(new Interval(start, end)); return resultList; } }