[Leetcode]Merge Intervals

本文介绍如何使用算法将重叠的区间合并为最少数量的不重叠区间。通过排序和遍历,实现高效的时间复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


/**
 * 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:
    /*algorithm  sort + merge
      1)for interval[begin,end], sort first by begin , if same, by end
      2)merge
      time O(n*lgn)
    */
    struct cmp {
      bool operator()(const Interval& l,const Interval &r){
            return l.start < r.start;     
      }
    } myCmp;
    vector<Interval> merge(vector<Interval>& intervals) {
            vector<Interval>ret;
            if(intervals.size() < 1)return ret;
            sort(intervals.begin(),intervals.end(),myCmp);
            intervals.push_back(Interval(INT_MAX,INT_MAX));//add as mark end

            Interval cur = intervals[0];
            for(int i = 1;i < intervals.size();i++){
                //merge window if overlap
                if(cur.end >= intervals[i].start){
                    cur.start = min(cur.start,intervals[i].start);
                    cur.end = max(cur.end,intervals[i].end);
                }else{ //no overlap
                    ret.push_back(cur);
                    cur = intervals[i];
                }
            }
            return ret;
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值