以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。
解题思路:1 对数组进行排序
2 比较每个区间的端点:下一个区间的左端点与当前区间的右端点进行比较,若下一区间的左端点比当前区间的右端点小,则将两个区间合并,即下一个区间的右端点更新到当前区间的右端点,组成新的区间。
涉及算法:排序:选用sort
用法:sort(起始位置,结束位置,排序规则)
第三个参数可以不写,默认升序。
eg:sort(begin,end);
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
sort(intervals.begin(), intervals.end());
vector<vector<int>> res;
int length = intervals.size();
for(int i = 0;i < length ; )
{
int temp = intervals[i][1];//右端点
int j = i + 1;//下一个区间
while(j < length && intervals[j][0] <= temp)
{
temp = max(temp, intervals[j][1]);
++j;
}
res.push_back({intervals[i][0], temp});
i = j;
}
return res;
}
};
执行结果:
通过
显示详情
执行用时:32 ms, 在所有 C++ 提交中击败了77.04% 的用户
内存消耗:18.5 MB, 在所有 C++ 提交中击败了46.81% 的用户
通过测试用例:170 / 170
作者:力扣 (LeetCode)
链接:https://leetcode.cn/leetbook/read/array-and-string/c5tv3/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。