56. Merge Intervals
来源:互联网 发布:淘宝书城 编辑:程序博客网 时间:2024/06/06 05:45
题目
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].
思路
本题,说难不难,说简单也不简单,就是稍稍有些绕,特此总结一个清晰的思路,如下:
step1:首先对
vector<Interval>
进行排序,这里的compare函数需要自己写,如下:
struct myclass { bool operator() (Interval i,Interval j) { return (i.start<j.start); } } myobject; sort(intervals.begin(),intervals.end(),myobject);
step2:然后维护两个变量start和end,来标记当前数组的起始与结束的位置,遍历数组,遍历的过程中需要判断相邻两个数组之间是否有重叠,重叠的触发条件如下:
intervals[i].end>=intervals[i+1].start
step3 :如果没有重叠,更新start、end并添加Interval,如果存在重叠,同样更新start、end;
step4:调出循环,添加临界数组即末尾数组
代码
/** * 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: struct myclass { bool operator() (Interval i,Interval j) { return (i.start<j.start); } } myobject; vector<Interval> merge(vector<Interval>& intervals) { vector<Interval> res; if(intervals.empty()) return res; Interval temp; sort(intervals.begin(),intervals.end(),myobject);//排序 int start=intervals[0].start,end = intervals[0].end; //重叠的触发条件:intervals[i].end>=intervals[i+1].start for(int i=0;i<intervals.size()-1;i++) { if(intervals[i].end<intervals[i+1].start) { temp.start = start; temp.end = intervals[i].end; res.push_back(temp); start = intervals[i+1].start; end = intervals[i+1].end; } else//发生重叠 { if(intervals[i].end>=intervals[i+1].end) { start = intervals[i].start; end = intervals[i].end; intervals[i+1].start = start; intervals[i+1].end = end; } else { start = intervals[i].start; end = intervals[i+1].end; intervals[i+1].start = start ; intervals[i+1].end = end; } } } temp.start = start; temp.end = intervals[intervals.size()-1].end; res.push_back(temp); return res; }};
阅读全文
0 0
- [LeetCode]56.Merge Intervals
- 56. Merge Intervals Leetcode
- LeetCode --- 56. Merge Intervals
- LeetCode 56.Merge Intervals
- [Leetcode] 56. Merge Intervals
- [leetcode] 56.Merge Intervals
- 【leetcode】56. Merge Intervals
- 56. Merge Intervals
- [leetcode] 56.Merge Intervals
- 56. Merge Intervals
- **LeetCode 56. Merge Intervals
- LeetCode 56. Merge Intervals
- 56. Merge Intervals
- leetcode 56. Merge Intervals
- 【LeetCode】56. Merge Intervals
- LeetCode 56. Merge Intervals
- 56. Merge Intervals
- 【leetcode】56. Merge Intervals
- js基础-DOM-属性和CSS
- static final 基础(一)
- 签到界面总结
- 循环创建btn+使用imageEdgeInsets约束+设置图片大小
- 域环境提权、编辑注册表
- 56. Merge Intervals
- Java 设计模式之动态代理、静态代理
- Android Butter Knife使用
- 根分区和根目录
- LinkedBlockingQueue的put,add跟offer的区别
- 搭建Webmin服务器管理系统
- NativeXml:读取
- string/tostring/string.valueof的区别
- as中引入project时报错 could not be found in project ':aaa'.