zoukankan      html  css  js  c++  java
  • Leetcode--Merge Intervals

    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;
        }
    };
    


  • 相关阅读:
    概率dp呜呜
    树上路径问题---点分治题集
    POJ 1741 Tree
    接下来的计划
    很逗 的网络赛历程
    Codeforces Round #264 (Div. 2) D
    似乎了解了树形dp/
    先胡乱搭一个blog
    POJ 1330 (LCA)
    文件操作
  • 原文地址:https://www.cnblogs.com/mthoutai/p/6811311.html
Copyright © 2011-2022 走看看