56. Merge Intervals
Given a collection of intervals, merge all overlapping intervals.
For example,
Given [1,3],[2,6],[8,10],[15,18],
return [1,6],[8,10],[15,18].题目大意:给定两个interval,合并两个Interval的公共部分。
思路:首先按照start从小到大排序,之后遍历Interval,找出所有>=当前start的end,并取当前的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; } * } */ class Solution { public List<Interval> merge(List<Interval> intervals) { List<Interval> res = new ArrayList<>(); if (intervals == null || intervals.size() == 0) { return res; } // 按照start从小到大排序 Collections.sort(intervals, new Comparator<Interval>() { @Override public int compare(Interval o1, Interval o2) { return o1.start - o2.start; } }); int start = intervals.get(0).start; int end = intervals.get(0).end; //遍历Interval for (Interval interval : intervals) { if (interval.start <= end) { end = Math.max(end, interval.end); } else { res.add(new Interval(start, end)); start = interval.start; end = interval.end; } } res.add(new Interval(start, end)); return res; } }