合并区间 LeetCode热题100

题目

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。

思路

对区间以开始点为目标进行排序,遍历所有区间,如果下一个区间开始点小于上一个区间结束点,则合并。

代码

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

你可能感兴趣的:(面试算法,LeetCode,leetcode,算法)