leetcode 56. Merge Intervals 57. Insert Interval
来源:互联网 发布:前方交会编程 编辑:程序博客网 时间:2024/05/14 19:05
56. 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].
方法一:先按照start位置排序,然后挨个比较与身后的关系,如果可以合并就合并,然后删除后面一个。
方法二:建立一个ret数组,然后往里面放,就可以不用删除。
/** * 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(Interval &a,Interval &b){ return a.start < b.start;}class Solution {public: vector<Interval> merge(vector<Interval>& intervals) { //way-1 /* if(intervals.size() == 0) return intervals; sort(intervals.begin(), intervals.end(), comp); for (int i = 0; i < intervals.size() - 1; i++) { if (intervals[i+1].start > intervals[i].end) continue; else if (intervals[i+1].start <= intervals[i].end) { intervals[i].end = max(intervals[i+1].end, intervals[i].end); intervals.erase(intervals.begin() + i + 1); i--; } } return intervals; */ //way-2 if (intervals.size() == 0) return intervals; sort(intervals.begin(), intervals.end(), comp); vector<Interval> ret; ret.push_back(intervals[0]); for (int i = 1; i < intervals.size(); i++) { if (intervals[i].start <= ret[ret.size()-1].end) ret[ret.size()-1].end = max(ret[ret.size()-1].end, intervals[i].end); else ret.push_back(intervals[i]); } return ret; }};
57. Insert Interval
Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary).
You may assume that the intervals were initially sorted according to their start times.
Example 1:
Given intervals [1,3],[6,9], insert and merge [2,5] in as [1,5],[6,9].
Example 2:
Given [1,2],[3,5],[6,7],[8,10],[12,16], insert and merge [4,9] in as [1,2],[3,10],[12,16].
This is because the new interval [4,9] overlaps with [3,5],[6,7],[8,10].
way-1 : 先把新的插入,然后合并用merge
way-2:不排序,直接插入。分别处理好 插入左边,插入中间,插入右边的情况就行!
/** * 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(Interval &a,Interval &b){ return a.start<b.start; }class Solution {public: vector<Interval> insert(vector<Interval>& intervals, Interval newInterval) { //way-1 /* intervals.push_back(newInterval); return merge(intervals); */ //way-2 vector<Interval> ret; int k = 0; while (k < intervals.size() && intervals[k].end < newInterval.start) ret.push_back(intervals[k++]); ret.push_back(newInterval); while(k < intervals.size() && intervals[k].start <= ret[ret.size()-1].end) { ret[ret.size()-1].start = min(ret[ret.size()-1].start, intervals[k].start); ret[ret.size()-1].end = max(ret[ret.size()-1].end, intervals[k].end); k++; } while(k < intervals.size()) ret.push_back(intervals[k++]); return ret; } vector<Interval> merge(vector<Interval>& intervals) { sort(intervals.begin(), intervals.end(), comp); vector<Interval> ret; ret.push_back(intervals[0]); for(int i = 1; i < intervals.size(); i++) { if (intervals[i].start <= ret[ret.size()-1].end) ret[ret.size()-1].end = max(ret[ret.size()-1].end, intervals[i].end); else ret.push_back(intervals[i]); } return ret; }};
阅读全文
0 0
- LeetCode 57. Insert Interval/56. Merge Intervals
- Leetcode 56. Merge Intervals & 57. Insert Interval
- leetcode 56. Merge Intervals 57. Insert Interval
- Leetcode 56. Merge Intervals && 57. Insert Interval(Hard)
- [LeetCode] Merge Intervals、Insert Interval:
- 【LeetCode】Merge Intervals && Insert Interval
- leetcode Merge Intervals & Insert Interval
- 【LeetCode】Merge Intervals && Insert Interval
- [LeetCode]Merge Intervals && Insert Interval
- 57. Insert Interval & 56. Merge Intervals
- 56. Merge Intervals && 57. Insert Interval
- Merge Intervals And Insert Interval -- Leetcode
- Merge Intervals & Insert Interval
- Merge Intervals && Insert Interval
- 56/57. Merge Intervals; Insert Interval
- LeetCode: Insert Interval & Merge Interval
- 56-Merge Intervals && 57-Insert Interval
- LeetCode题解:Merge/Insert Interval
- JavaScript作用域与作用域链
- 渗透测试工程师的17个常用工具 还有专家告诉你如何成为渗透测试人员—转载绿盟
- HTTP协议详解
- 操作系统(科普章节)
- Android 零碎知识点
- leetcode 56. Merge Intervals 57. Insert Interval
- fgets函数的用法
- 深度丨AlphaGo Zero的启示:监督学习和无监督学习的利弊
- 福利丨9大深度学习在线课程,你没理由不看!
- 业界丨一文看懂AI人才百万美元年薪因何而来?
- 干货丨一文读懂深度学习与机器学习的差异
- 干货丨一份不可多得的深度学习技巧指南
- 心得丨吴恩达Deeplearning.ai 全部课程学习心得分享
- 干货丨从概念到案例:初学者须知的十大机器学习算法