[leetcode]Merge Intervals

整体不难,一开始以为是线段树,后来仔细看来不需要,从左到右扫,判断是否要merge就是了。此题有几个要注意的地方:1.Java的Comparator要会写;2.循环结束后的ans.add(tmp)不要忘记;3.merge的时候,左右边界要计算一下。

/**

 * 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 ArrayList<Interval> merge(ArrayList<Interval> intervals) {

        // Start typing your Java solution below

        // DO NOT write main() function              

        int len = intervals.size();

        if (len == 0 || len == 1) return intervals;

        ArrayList<Interval> ans = new ArrayList<Interval>();

        

        Collections.sort(intervals, new IntervalComparator());

        

        Interval tmp = intervals.get(0);

        for (int i = 1; i < len; i++) {

            Interval itv = intervals.get(i);

            if (tmp.end >= itv.start) { // mergeable

                int left = Math.min(tmp.start, itv.start);

                int right = Math.max(tmp.end, itv.end);

                tmp = new Interval(left, right);

            }

            else {

                ans.add(tmp);

                tmp = intervals.get(i);

            }

        }

        ans.add(tmp);

        return ans;

    }

}



class IntervalComparator implements Comparator<Interval>

{

    public int compare(Interval a, Interval b) {

        return a.start - b.start;

    }

}

第二刷:

bool cmp(const Interval &a, const Interval &b)

{

    if (a.start != b.start)

        return a.start < b.start;

    else

        return a.end < b.end;

}



class Solution {

public:

    vector<Interval> merge(vector<Interval> &intervals) {

        vector<Interval> result;

        sort(intervals.begin(),intervals.end(), cmp);

        for (int i = 0; i < intervals.size(); i++)

        {

            if (result.size() == 0 || result.back().end < intervals[i].start)

            {

                result.push_back(intervals[i]);

            }

            else if (intervals[i].end > result.back().end)

            {

                result.back().end = intervals[i].end;

            }

        }

        return result;

    }

};

  

你可能感兴趣的:(LeetCode)