LeetCode 56. Merge Intervals

来源:互联网 发布:php简历管理系统 编辑:程序博客网 时间:2024/06/07 22:54

题意

给出n个区间,合并连续的区间并进行分块

思路

使用贪心的思想,按照起始点和结束点进行排序,然后遍历记录当前块的起始点和结束点,如果遍历点不在当前块内,存储当前块,然后重新分块,更新当前块.

代码

/** * 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) {        vector<Interval>ans;        size_t len = intervals.size();        if(len == 0) return ans;        sort(intervals.begin(), intervals.end(), cmp);        int L = intervals[0].start, R = intervals[0].end;        for(int i = 1; i < len; i++){            if(intervals[i].start <= R){                R = max(R, intervals[i].end);            } else{                ans.push_back(Interval(L, R));                L = intervals[i].start;                R = intervals[i].end;            }        }        ans.push_back(Interval(L, R));        return ans;    }private:    static bool cmp(Interval A, Interval B){        if(A.start == B.start){            return A.end < B.end;        }        return A.start < B.start;    }};
原创粉丝点击