57. Insert Interval

来源:互联网 发布:淘宝店运营商靠谱吗 编辑:程序博客网 时间:2024/05/17 23:55
/** * 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>& intervals, Interval newInterval) {        auto i =  upper_bound(intervals.begin(), intervals.end(), newInterval, comp1);        intervals.insert(i, newInterval);        return merge(intervals);    }    static bool comp1(const Interval &a, const Interval &b){        return a.start < b.start;    }    static bool comp(const Interval &a, const Interval &b){        return a.start < b.start;    }    vector<Interval> merge(vector<Interval>& intervals) {        int pos = 0, sz = intervals.size();        intervals.push_back(Interval(0x7fffffff, 0x7fffffff));        vector<Interval> ans;        while(pos < sz){            int maxRight = intervals[pos].end, t = pos;            while(pos < sz && maxRight >= intervals[++pos].start) { maxRight = max(maxRight, intervals[pos].end); }            ans.push_back(Interval(intervals[t].start, maxRight));        }        return ans;    }};