LeetCode Merge Intervals
来源:互联网 发布:格式化u盘恢复数据 编辑:程序博客网 时间:2024/06/07 03:56
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]
.
一开始sb了 用数组代表坐标记录覆盖地点,然后单独处理开始等于结束的点
/** * 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: void setbit(char* array,int begin,int end) { for(int i=begin;i<end;++i) { array[i] = 1; } } vector<Interval> merge(vector<Interval> &intervals) { size_t LEN = 65535; vector<Interval> vec; set<int> same; char array[LEN]; memset(array,0,sizeof(char)*LEN); vector<Interval>::iterator i = intervals.begin(); for(i;i!=intervals.end();++i) { if((*i).start == (*i).end) { same.insert((*i).start); } setbit(array,(*i).start,(*i).end); } int tmp = 0; int start,end; bool isstart = false; int c = 0; set<int>::iterator it = same.begin(); while(it!=same.end()) { if((*it > 0) && (array[(*it)]||array[((*it) - 1)]) || (*it==0 && array[0])) same.erase(it++); else ++it; } for(set<int>::iterator it = same.begin();it!=same.end();++it) { Interval *interval = new Interval(*it,*it); vec.push_back(*interval); } for(int n=0;n<LEN;++n) { if(tmp!=array[n]) { if(!isstart) { start = n; isstart = true; } else { end = n; isstart = false; Interval *interval = new Interval(start,end); vec.push_back(*interval); } } tmp = array[n]; } return vec; }};
觉得不能这么长 看了discuss 原来就是merge过程 然后自己写了个merge 好短= =、
bool CMP(const Interval& it1,const Interval& it2){ if(it1.start!=it2.start) return it1.start < it2.start; else return it1.end < it2.end;}class Solution {public: vector<Interval> merge(vector<Interval> &intervals) { vector<Interval> rsvec; if(intervals.size()==0) return rsvec; std::sort(intervals.begin(),intervals.end(),CMP); int startp=(intervals.begin())->start,endp=(intervals.begin())->end; if(intervals.size()==1) { rsvec.push_back(*(new Interval(startp,endp))); return rsvec; } vector<Interval>::iterator i=intervals.begin(); for(i;i!=intervals.end();++i) { if((*i).start > endp) { rsvec.push_back(*(new Interval(startp,endp))); startp = (*i).start; endp = (*i).end; } else if((*i).end > endp) endp = (*i).end; } rsvec.push_back(*(new Interval(startp,endp))); return rsvec; }};
0 0
- LeetCode: Merge Intervals
- LeetCode Merge Intervals
- LeetCode: Merge Intervals
- [Leetcode] Merge Intervals
- leetcode 28: Merge Intervals
- Leetcode: Merge Intervals
- [LeetCode] Merge Intervals
- [LeetCode]Merge Intervals
- leetcode merge intervals
- [leetcode]Merge Intervals
- LeetCode-Merge Intervals
- [leetcode] Merge Intervals
- LeetCode - Merge Intervals
- 【leetcode】Merge Intervals
- leetcode Merge Intervals
- LeetCode Merge Intervals
- [LeetCode] Merge Intervals
- LeetCode | Merge Intervals
- wpf圆角矩形
- ubuntu14.04安装mysql5.6
- C++ cin不支持录入空格
- POI 导入导出Excel文件到数据库
- typedef和#define区别
- LeetCode Merge Intervals
- 四大名著经典妙解
- 国外医疗行业大数据应用解决之道
- 移动客户端,消息推送实现方式探讨
- Cocos2d-x 3.0的启动流程
- 多值响应
- MotionEvent事件在onInterceptTouchEvent()、onTouchEvent()中的传递顺序
- a公司研发流程和必要制度
- lvm 逻辑卷的快照及备份 还原