Leetcode--Merge Intervals

來源:互聯網
上載者:User

標籤:des   style   blog   color   os   io   for   2014   

Problem Description:

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

分析:按照要求將區間合并,首先將按照按起點排序,然後從前往後依次合并即可,首先判斷相鄰兩個區間是否有交集,沒有則直接將前一個儲存,有交集的兩個區間合并之後不能直接儲存,需要和下一個區間比較是否有交集,沒有交集才能儲存,代碼中利用一個temp區間儲存當前合并後的區間,直到最後合并完成。具體代碼如下:

/** * Definition for an interval. * struct Interval { *     int start; *     int end; *     Interval() : start(0), end(0) {} *     Interval(int s, int e) : start(s), end(e) {} * }; */ struct cmpLess{         bool operator ()(const Interval & a,const Interval & b)         {              return a.start<b.start;         }}; class Solution {public:    Interval merge(Interval a,Interval b)    {        Interval c;        c.start=min(a.start,b.start);        c.end=max(a.end,b.end);        return c;    }    vector<Interval> merge(vector<Interval> &intervals) {        vector<Interval> res;        if(intervals.size()==0)            return res;        Interval temp;        int flag=0;//判斷上一次是否有區間合并        sort(intervals.begin(),intervals.end(),cmpLess());                for(int i=1;i<intervals.size();i++)        {            if(flag==0)            {                if(intervals[i-1].end<intervals[i].start)                    res.push_back(intervals[i-1]);                else                {                    temp=merge(intervals[i-1],intervals[i]);                    flag=1;                }                            }            else            {                if(temp.end<intervals[i].start)                {                    res.push_back(temp);                    flag=0;                }                else                    temp=merge(temp,intervals[i]);            }        }        if(flag==0)            res.push_back(intervals[intervals.size()-1]);        else            res.push_back(temp);        return res;    }};


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.