Lintcode:合并区间

问题:

给出若干闭合区间,合并全部重叠的部分。python

样例:

样例1:app

输入: [(1,3)]
输出: [(1,3)]

样例 2:this

输入:  [(1,3),(2,6),(8,10),(15,18)]
输出: [(1,6),(8,10),(15,18)]

python:code

"""
Definition of Interval.
class Interval(object):
    def __init__(self, start, end):
        self.start = start
        self.end = end
"""

class Solution:
    """
    @param intervals: interval list.
    @return: A new interval list.
    """
    def merge(self, intervals):
        # write your code here
        if len(intervals) <= 1:
            return intervals
        intervals = sorted(intervals, key=lambda x:x.start)
        result = [intervals[0]]
        for i in range(len(intervals)):
            if result[-1].end < intervals[i].start:
                result.append(intervals[i])
            else:
                result[-1].end = max(result[-1].end, intervals[i].end)
        return result

C++:it

/**
 * Definition of Interval:
 * classs Interval {
 *     int start, end;
 *     Interval(int start, int end) {
 *         this->start = start;
 *         this->end = end;
 *     }
 * }
 */

class Solution {
public:
    /**
     * @param intervals: interval list.
     * @return: A new interval list.
     */
    vector<Interval> merge(vector<Interval> &intervals) {
        // write your code here
        if(intervals.size() <= 1)
        {
            return intervals;
        }
        sort(intervals.begin(), intervals.end(), [](const Interval &a, const Interval &b){return a.start < b.start;});
        vector<Interval> result;
        result.push_back(intervals[0]);
        for(int i = 0; i < intervals.size(); i++)
        {
            if(result.back().end >= intervals[i].start)
            {
                result.back().end = max(result.back().end, intervals[i].end);
            }else{
                result.push_back(intervals[i]);
            }
        }
        return result;
    }
};