leetcode: Merge Intervals

来源:互联网 发布:点云数据处理软件 编辑:程序博客网 时间:2024/05/16 18:30

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


AC,如果不新开一个vector保存结果,原地合并需要先对intervals按start排序,这个复杂度较高,会超时

/** * Definition for an interval. * struct Interval { *     int start; *     int end; *     Interval() : start(0), end(0) {} *     Interval(int s, int e) : start(s), end(e) {} * }; */class Solution {public:    vector< Interval> insert( vector< Interval> &res, Interval new_interval){        auto iter = res.begin();        while( iter != res.end()){            if( new_interval.end < iter->start){                res.insert( iter, new_interval);                return res;            }            else if( iter->end < new_interval.start){                ++iter;                continue;            }            else{                new_interval.start = min( iter->start, new_interval.start);                new_interval.end = max( iter->end, new_interval.end);                res.erase(iter);            }        }        res.insert( res.end(), new_interval);        return res;    }     vector<Interval> merge(vector<Interval> &intervals) {        vector< Interval> res;        for( int i = 0; i < intervals.size(); ++i){            insert( res, intervals[i]);        }        return res;    }};


0 0
原创粉丝点击