LeetCode (Merge Intervals)

来源:互联网 发布:淘宝banner尺寸大小 编辑:程序博客网 时间:2024/06/06 06:43

Problem:

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

Solution1:

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

Solution2:

/** * 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> merge(vector<Interval>& intervals) {        if(intervals.size() < 2) return intervals;        vector<int> start, end;        for(auto s : intervals){            start.push_back(s.start);            end.push_back(s.end);        }        sort(start.begin(), start.end());        sort(end.begin(), end.end());        vector<Interval> ans;        Interval temp;        int i = 0;        while(i < start.size()){            temp.start = start[i];            while(i < start.size() - 1 && start[i + 1] <= end[i])                i++;            temp.end = end[i];            ans.push_back(temp);            if(i == start.size() - 1)                break;            else i++;        }        return ans;    }};



0 0