[Leetcode 56, Hard] Merge intervals

Problem:

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

Analysis:

1. Brute-force method. 

2. Sort.

Solution:

Brute-force solution:

bool isIntersection(Interval &int1, Interval &int2){
        if(int1.end<int2.start || int2.end<int1.start) return false;
        return true;
    }
    
    void mergeIntervalsToFirst(Interval &int1, Interval &int2){
        if(int1.start>int2.start) int1.start=int2.start;
        if(int1.end<int2.end) int1.end=int2.end;
    }
    
    vector<Interval> merge(vector<Interval> &intervals) {
        vector<Interval> rint;
        if(intervals.size()==0) return rint;
        
        int len=intervals.size();
        bool isMerge=false;
        for(int i=0; i<len; ++i){
            if(i==0) rint.push_back(intervals[0]);
            else{
                int lenRint=rint.size();
                for(int j=0; j<lenRint; ++j){
                    if(isIntersection(rint[j], intervals[i])){
                        mergeIntervalsToFirst(rint[j], intervals[i]);
                        //Check after intervals whether to be included.
                        std::vector<Interval>::iterator iter=rint.begin()+j+1;
                        while(iter!=rint.end()){
                            if(isIntersection(rint[j], *iter)){
                                mergeIntervalsToFirst(rint[j], *iter);
                                rint.erase(iter);
                            }else ++iter;
                        }
                        isMerge=true;
                        break;
                    }
                }
                if(!isMerge)    rint.push_back(intervals[i]);
                else isMerge=false;
            }
        }
        return rint;
    }


2. Need to make up.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值