力扣打卡记录:合并区间

以数组 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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值