Merge Intervals

来源:互联网 发布:intent获取数据 编辑:程序博客网 时间:2024/06/07 21:43

题目:

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进行排序

Collections.sort(intervals, new IntervalComparator());class IntervalComparator implements Comparator<Interval> {public int compare(Interval i1, Interval i2) {return i1.start - i2.start;}}

这里判断重合的条件主要是,当前interval的start小于前一个interval的end.....

否则不重合,直接将prev加入结果集中;最后。。。

参考代码:

http://www.programcreek.com/2012/12/leetcode-merge-intervals/

/** * 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; } * } */public class Solution {    public List<Interval> merge(List<Interval> intervals) { if (intervals == null || intervals.size() <= 1)return intervals; // sort intervals by using self-defined ComparatorCollections.sort(intervals, new IntervalComparator()); List<Interval> result = new ArrayList<Interval>(); Interval prev = intervals.get(0);for (int i = 1; i < intervals.size(); i++) {Interval curr = intervals.get(i); if (prev.end >= curr.start) {// merged caseInterval merged = new Interval(prev.start, Math.max(prev.end, curr.end));prev = merged;} else {result.add(prev);prev = curr;}} result.add(prev); return result;}}class IntervalComparator implements Comparator<Interval> {public int compare(Interval i1, Interval i2) {return i1.start - i2.start;}}



0 0