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

 

/**
* Definition for an interval.
* struct Interval {
* int start;
* int end;
* Interval() : start(0), end(0) {}
* Interval(int s, int e) : start(s), end(e) {}
* };
*/

 

先对所给数组以start升序排序,然后就比较好做了。

AC代码

class Solution {
public:
    static bool comp(const Interval &a, const Interval &b)
    {  
        return a.start < b.start;
    }
    vector<Interval> merge(vector<Interval> &intervals) {
        vector<Interval> ret;
        sort(intervals.begin(), intervals.end(), Solution::comp);
        if(intervals.size() == 0)
            return ret;
        ret.push_back(intervals[0]);
        for(int i = 1; i < intervals.size(); ++i){
            int start = ret[ret.size() - 1].start;
            int end = ret[ret.size() - 1].end;
            if(intervals[i].start <= end)
                ret[ret.size() - 1].end = max(end, intervals[i].end);
            else
                ret.push_back(intervals[i]);
        }
        return ret;
    }

};

1. STL中的sort只接受全局函数或者静态函数  作为比较函数

2.sort 的比较函数需要定义成严格偏序,不能让a<b  与 a>b同时成立,否则算法会出现一些很奇葩的问题~至于为什么,我也想知道为什么

3.如果sort的比较函数要写成引用,必须写成 const value_type &argu  ,因为sort函数其实会重写个很厉害的函数,只接受非引用参数或者常量引用,然后再把它传给比较函数,写成非常量的引用是会报错的~

 

posted on 2014-12-05 22:34  远近闻名的学渣  阅读(131)  评论(0)    收藏  举报

导航