zoukankan      html  css  js  c++  java
  • [LeetCode]Merge Intervals

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

    思考:先排序。比较相邻两个interval,left为前一个start,若后一个start小于等于前一个,说明这两个interval需要合并,right为两个end较大者。若后一个start大于前一个end,说明这两个interval不需要合并,输出前一个。

    /**
     * Definition for an interval.
     * struct Interval {
     *     int start;
     *     int end;
     *     Interval() : start(0), end(0) {}
     *     Interval(int s, int e) : start(s), end(e) {}
     * };
     */
    bool comp(const Interval &a,const Interval &b)
    {
    	return a.start<b.start;
    }
    class Solution {
    private:
    	vector<Interval> ret;
    public:
    
    		vector<Interval> merge(vector<Interval> &intervals) {
            // IMPORTANT: Please reset any member data you declared, as
            // the same Solution instance will be reused for each test case.
    		ret.clear();
            int len=intervals.size();
    		if(len==0) return ret;
    		if(len==1) {ret.push_back(intervals[0]);return ret;}
    		sort(intervals.begin(),intervals.end(),comp);
    		int left=intervals[0].start;
    		int right=intervals[0].end;
    		for(int i=1;i<len;i++)
    		{
    			if(intervals[i].start<=right)
    				right=max(right,intervals[i].end);
    			if(intervals[i].start>right)
    			{
    		//		cout<<left<<" "<<right<<endl;
    				ret.push_back(Interval(left,right));
    				left=intervals[i].start;
    				right=intervals[i].end;
    			}
    			if(i==len-1){
    		//	    cout<<left<<" "<<right<<endl;
    			ret.push_back(Interval(left,right));}
    		}
    		return ret;
        }
    };
    

      

  • 相关阅读:
    收藏转载:一些视频流地址
    转载收藏:Android 输入法表情上传服务器
    Android N 的开机启动流程概述
    列举至少3种Support包中提供的布局或工具
    代码混淆定义
    应用内存优化主要思路
    锁屏的一些动画
    毛玻璃效果
    关于宏定义
    openresty性能测试报告分析
  • 原文地址:https://www.cnblogs.com/Rosanna/p/3434701.html
Copyright © 2011-2022 走看看