[LeetCode] 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].
#include <vector>
#include <iostream>
using namespace std;
/**
* Definition for an interval.
*/
struct Interval {
int start;
int end;
Interval() : start(), end() {}
Interval(int s, int e) : start(s), end(e) {}
}; class Solution {
public:
vector<Interval> insert(vector<Interval> &intervals, Interval newInterval) {
int n = intervals.size();
if(n<) return vector<Interval>{{newInterval.start,newInterval.end}};
vector<Interval> ret;
// if(n==1){
// if(newInterval.end<intervals[0].start){
// ret.push_back(newInterval); ret.push_back(intervals[0]);
// return ret;
// }
// if(intervals[0].end<newInterval.start){
// ret.push_back(intervals[0]); ret.push_back(newInterval);
// return ret;
// }
// }
int idx1 =binsearch(intervals,newInterval.start);
int idx2 =binsearch(intervals,newInterval.end);
int idx_tmp,newStart;
if(intervals[idx1].end>=newInterval.start){
idx_tmp = idx1-;
newStart = intervals[idx1].start<newInterval.start?intervals[idx1].start:newInterval.start;
}
else{
idx_tmp=idx1;
newStart = newInterval.start;
}
for(int i=;i<=idx_tmp;i++) ret.push_back(intervals[i]);
int newEnd;
if(newInterval.end<intervals[idx2].start){
newEnd = newInterval.end;
idx_tmp = idx2;
}
else{
newEnd = intervals[idx2].end>newInterval.end?intervals[idx2].end:newInterval.end;
idx_tmp = idx2+;
}
ret.push_back(Interval(newStart,newEnd));
for(int i=idx_tmp;i<n;i++) ret.push_back(intervals[i]);
return ret;
} int binsearch(vector<Interval> &ints,int target)
{
if(ints.size()==) return ;
int lft = ,rgt = ints.size()-;
if(ints[rgt].start<=target) return rgt;
if(ints[lft].start>=target) return lft;
int ret = ;
do{
int mid = (lft+rgt)/;
if(ints[mid].start>target) rgt=mid;
else lft=mid;
ret = lft;
if(ints[ret+].start>target) break;
}while(lft+<rgt);
return ret;
}
}; int main(){
vector<Interval> intervals{{,},{,},{,},{,},{,}};
// vector<Interval> intervals{{1,2}};
// cout<<intervals[0].start<<" "<<intervals[1].end<<endl;
Interval newInterval(-,);
Solution sol;
vector<Interval> ret = sol.insert(intervals,newInterval);
for(int i=;i<ret.size();i++)
cout<<ret[i].start<<" "<<ret[i].end<<endl;
return ;
}
[LeetCode] Insert Interval 二分搜索的更多相关文章
- leetcode Insert Interval 区间插入
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4051169.html 题目链接:leetcode Insert Interval 使用模拟 ...
- [LeetCode] Insert Interval 插入区间
Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessa ...
- [leetcode]Insert Interval @ Python
原题地址:https://oj.leetcode.com/problems/insert-interval/ 题意: Given a set of non-overlapping intervals, ...
- Leetcode Insert Interval
Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessa ...
- 57[LeetCode] Insert Interval
Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessa ...
- [LeetCode]Insert Interval 考虑多种情况
写太复杂了. 思想:确定带插入区间的每一个边界位于给定区间中的哪个位置,共同拥有5种情况 -1 |(0)_1_(2)| (3) 当中.0,1,2这三种情况是一样的. 确定每一个带插入区间的两个边界分 ...
- 【题解】【区间】【二分查找】【Leetcode】Insert Interval & Merge Intervals
Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessa ...
- [LeetCode] Merge Interval系列,题:Insert Interval,Merge Intervals
Interval的合并时比较常见的一类题目,网上的Amazon面经上也有面试这道题的记录.这里以LeetCode上的例题做练习. Merge Intervals Given a collection ...
- 【LeetCode】57. Insert Interval [Interval 系列]
LeetCode中,有很多关于一组interval的问题.大体可分为两类: 1.查看是否有区间重叠: 2.合并重叠区间; 3.插入新的区间: 4. 基于interval的其他问题 [ 做题通用的关键 ...
随机推荐
- 2D和3D效果
<style type="text/css"> #div1{ width: 200px; height: 200px; background-color:#aaa; c ...
- selinux详解及配置文件
selinux详解 selinux 的全称是Security Enhance Linux,就是安全加强的Linux.在Selinux之前root账号能够任意的访问所有文档和服务 : 如果某个文件设为7 ...
- Vue-Router基础学习笔记
1.安装vue-router npm install vue-router yarn add vue-router 2.引入注册vue-router import Vue from 'vue' imp ...
- django之路由分发
路由分发决定哪一个路由由哪一个视图函数来处理. 注意:django2.0里的re_path和django1.0里的url除了名字不一样,其他都一样. 简单配置 from django.urls imp ...
- HDU5952 Counting Cliques 暴搜优化
一.前言 这题看上去相当唬人(NPC问题),但是 因为限制了一些条件,所以实际上并没有太唬人. 二.题目 给你一个图,要求你找出数量为S的团的数量. 三.题解 暴搜,再加上一些玄学优化. 优化1:使用 ...
- laravel5.2总结--csrf保护
CSRF攻击: CSRF 顾名思义,是伪造请求,冒充用户在站内的正常操作.我们知道,绝大多数网站是通过 cookie 等方式辨识用户身份(包括使用服务器端 Session 的网站,因为 S ...
- C#操作XML配置文件
代码为C#操作xml配置文件的范例类,函数SetValue用于向配置文件写入一个值,GetValue用于根据Key获取相应值。这种方法的配置文件不需要手动创建,程序在运行后会自动处理创建。 注意:1. ...
- 【Minimum Path Sum】cpp
题目: Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right w ...
- android 内存说明
MemoryInfo的Field如下 dalvikPrivateDirty: The private dirty pages used by dalvik. dalvikPss :The propor ...
- Python-S9——Day100-Web前端框架之Vue
01 课程简介: 02 let和const: 03 箭头函数: 04 对象的单体模式: 05 nodejs介绍和npm操作: 06 webpack.babel介绍和vue的第一个案例: 07 昨日内容 ...