LeetCode--Insert Interval
来源:互联网 发布:小斯在以色列的数据 编辑:程序博客网 时间:2024/06/06 09:49
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]
.
/** * 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: vector<Interval> insert(vector<Interval> &intervals, Interval newInterval) { vector<Interval>& in = intervals; heap_sort(in); int n = in.size(); vector<Interval> res; bool flag = false; for(int i=0; i<n; i++) { if(in[i].start > newInterval.start && flag==false) { res.push_back(newInterval); flag = true; } res.push_back(in[i]); } if(!flag) res.push_back(newInterval); return merge(res); } vector<Interval> merge(vector<Interval> &intervals) { vector<Interval> res; vector<Interval>& in = intervals; int n = in.size(); if(n == 0) return res; if(n == 1) return in; Interval temp = in[0]; for(int i=1; i<n; i++) { if(temp.end < in[i].start) { res.push_back(temp); temp = in[i]; } else { int start = temp.start<in[i].start? temp.start:in[i].start; int end = temp.end>in[i].end? temp.end:in[i].end; temp.start = start; temp.end = end; } } res.push_back(temp); return res; } void swap(vector<Interval>& in, int i, int j) { int s = in[i].start; int e = in[i].end; in[i].start = in[j].start; in[i].end = in[j].end; in[j].start = s; in[j].end = e; } void sink(vector<Interval>& in, int loc, int end) { while(loc<end) { int k =2*loc+1; if(k>end) return; if(k<end && in[k].start<in[k+1].start) k++; if(in[loc].start>in[k].start) return; swap(in,loc,k); loc = k; } } void heap_sort(vector<Interval>& in) { int n = in.size()-1; for(int i=(n-1)/2; i>=0; i--) sink(in,i,n); while(n>0) { swap(in,0,n); n--; sink(in,0,n); } }};
1 0
- LeetCode: Insert Interval & Merge Interval
- LeetCode题目 Insert Interval
- LeetCode: Insert Interval
- LeetCode Insert Interval
- LeetCode: Insert Interval
- Leetcode: Insert Interval
- [LeetCode] Insert Interval
- LeetCode Insert Interval
- [LeetCode]Insert Interval
- leetcode insert interval
- [leetcode]Insert Interval
- LeetCode-Insert Interval
- [leetcode] Insert Interval
- LeetCode - Insert Interval
- 【leetcode】Insert Interval
- leetcode Insert Interval
- 【leetcode】Insert Interval
- LeetCode Insert Interval
- eclipse快捷键
- 游戏任务成就体系的实现(二):业务拆分和大功能模块定位
- CentOS 7 下网卡重新命名
- Unique Paths
- CentOS 7 下安装音频编辑器Audacity
- LeetCode--Insert Interval
- 什么是GC?GC的工作原理如何?
- BJFU 1005——Factorial of large numbers
- 为什么 Android 截屏需要 root 权限
- 程序链接与装载
- 机器视觉学习笔记(一)
- CentOS 7 最小化安装后 没有安装ifconfig命令的解决方法
- 安装配置cuda6.5以及vs2012的环境
- boost.any实现任意类型存储