[LeetCode]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].

解题思路

题目不难,注意几点即可:

1. Java的Comparator需要会写,类似于c里的quick sort
2. merge的时候,注意比较左右边界
3. 循环结束时,别忘了merge最后一个数据


AC代码

/**
 * 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 static ArrayList<Interval> merge(ArrayList<Interval> intervals) {
        ArrayList<Interval> result = new ArrayList<Interval>();

        // special case
        if (intervals == null || intervals.size() == 0) {
            return result;
        }

        // sort arraylist
        sortIntervals(intervals);

        // merge arraylist
        for (int i = 0; i < intervals.size() - 1; i++) {
            Interval first = intervals.get(i);
            Interval second = intervals.get(i + 1);
            if (first.end < second.start) {
                result.add(first);
            } else if (first.end >= second.start && first.end < second.end) {
                second.start = first.start;
            } else {
                second.start = first.start;
                second.end = first.end;
            }
        }
        result.add(intervals.get(intervals.size() - 1));

        return result;
    }

    private static void sortIntervals(ArrayList<Interval> intervals) {
        Collections.sort(intervals, new IntervalsComparator());
    }

    private static class IntervalsComparator implements Comparator<Interval> {

        @Override
        public int compare(Interval o1, Interval o2) {
            return o1.start - o2.start;
        }
    }
}


你可能感兴趣的:([LeetCode]Merge Intervals, 解题报告)