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

题目解析:

由于输入的数据不一定有序,就要先对原始数据按照起始范围排序。那么如何排序呢?sort()有一个三个参数的函数,第三个参数是一个函数指针,指向的函数定义了排序时应该按照的关键字,以及排序的方式(递增还是递减)

    static bool compareInterval(const Interval& a, const Interval& b)
	{
		return a.start < b.start;
	}

这样定义,就是按照第一个元素排序,并且按照递增的顺序排。

排好序后,就容易是数组合并了,当a[i].start > tmp.end的时候,就将tmp放入输出容器中,并以a[i]为新的tmp与后面的进行合并。

class Solution {
public:
    static bool compareInterval(const Interval& a, const Interval& b){
		return a.start < b.start;
	}

    vector<Interval> merge(vector<Interval> &intervals) {
        vector<Interval> ret;
		if(intervals.size() > 0){
			sort(intervals.begin(), intervals.end(), compareInterval);
			Interval temp = intervals.at(0);
			for(int i = 1; i < intervals.size(); ++i){
				if(intervals.at(i).start > temp.end){
					ret.push_back(temp);
					temp = intervals.at(i);
				}else
					temp.end = max(temp.end, intervals.at(i).end);
			}
			ret.push_back(temp);
		}
		return ret;
    }
};

点赞