LeetCode 715. Range Module

方法1.vector

class RangeModule {
private:  vector<pair<int,int>> ranges;
public:RangeModule() {}void addRange(int left,int right){vector<pair<int,int>>new_ranges;bool inserted=false;for(auto kv:ranges){if(kv.first>right && !inserted){new_ranges.emplace_back(left,right);//new_ranges.emplace_back(left,right);inserted=true;}if(kv.first>right || kv.second<left){ //无overlapnew_ranges.push_back(kv);}else{left=min(left,kv.first);right=max(right,kv.second);}}if(!inserted) new_ranges.emplace_back(left,right);ranges.swap(new_ranges);
}
bool queryRange(int left,int right){const int n=ranges.size();int l=0;int r=n-1;while(l<=r){int m=l+(r-l)/2;if(ranges[m].second<left) {l=m+1;}else if(ranges[m].first>right){r=m-1;}else{ ///m和[left,right]有overlapreturn ranges[m].first<=left&&ranges[m].second>=right; ///是否真子集}}return false;
}
void removeRange(int left,int right){vector<pair<int,int>> new_ranges;for(auto kv:ranges){if(kv.first>right || kv.second<left){new_ranges.push_back(kv);}else{if(kv.first<left) new_ranges.emplace_back(kv.first,left);if(kv.second>right) new_ranges.emplace_back(right,kv.second);}}ranges.swap(new_ranges);}
};/*** Your RangeModule object will be instantiated and called as such:* RangeModule* obj = new RangeModule();* obj->addRange(left,right);* bool param_2 = obj->queryRange(left,right);* obj->removeRange(left,right);*/

方法2..Map (BST)

class RangeModule {
private:typedef map<int,int>::iterator IT;map<int,int> ranges;void getOverlapRanges(int left,int right,IT& l,IT& r){l=ranges.upper_bound(left);r=ranges.upper_bound(right);if(l!=ranges.begin()){if((--l)->second<left) l++; //当前的[left,right]区间和--l的区间不交}}
public:RangeModule() {}void addRange(int left,int right){IT l,r;getOverlapRanges(left,right,l,r);if(l!=r){auto last=r;last--;left=min(left,l->first);right=max(right,last->second);ranges.erase(l,r);}ranges[left]=right;}
bool queryRange(int left,int right){IT l,r;getOverlapRanges(left,right,l,r);if(l==r){ //此区间不存在return false;}return l->first<=left&&l->second>=right; //真子集}
void removeRange(int left,int right){IT l,r;getOverlapRanges(left,right,l,r);if(l==r) return ;auto last=r;last--;int start=min(left,l->first);int End=max(right,last->second);ranges.erase(l,r);if(start<left) ranges[start]=left;if(End>right) ranges[right]=End;}
};/*** Your RangeModule object will be instantiated and called as such:* RangeModule* obj = new RangeModule();* obj->addRange(left,right);* bool param_2 = obj->queryRange(left,right);* obj->removeRange(left,right);*/

LeetCode_715. Range Module相关推荐

  1. 715. Range Module

    715. Range Module 题目描述:A Range Module is a module that tracks ranges of numbers. Your task is to des ...

  2. C#LeetCode刷题-数组

    数组篇 # 题名 刷题 通过率 难度 1 两数之和 C#LeetCode刷题之#1-两数之和(Two Sum) 43.1% 简单 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组 ...

  3. [转]python各模块的学习

    [-] 01 关于本书 02 代码约定 03 关于例子 04 如何联系我们 1 核心模块 11 介绍 111 内建函数和异常 112 操作系统接口模块 113 类型支持模块 114 正则表达式 115 ...

  4. leetcode算法练习 JavaScript实现

    leetcode 表格内容由spider.js从leetcode-cn.com爬取. 已做题目答案也从leetcode-cn.com中爬取并生成文件. 解题进度:已解决 140/637 - 简单 94 ...

  5. Linux输入输出系统原理笔记

    一.输入与输出 1. 对于操作系统来讲,控制各种输入输出设备是一件复杂的事情,因为这么多设备,形状.用法.功能都不一样.因此,CPU并不直接和设备打交道,它们中间有一个叫作设备控制器(Device C ...

  6. leetcode 题解 (500-1000题,持续更新,part 2)

    part1(1-500), part3(1000-*) 502. IPO 题意:给定k,w,profits数组和capital数组.k表示最多可完成的任务数.w是初始资本.profits是各个任务的收 ...

  7. 合并区间 · Merge Intervals 插入区间 · Insert Interval

    [抄题]: 给出若干闭合区间,合并所有重叠的部分. 给出的区间列表 => 合并后的区间列表: [ [[1, 3], [1, 6],[2, 6], => [8, 10],[8, 10], [ ...

  8. Linux操作系统学习笔记(十四)块设备

    一. 前言   上文我们分析了字符设备,本文接着分析块设备.我们首先分析块设备的基本结构体,然后分析块设备生成.加载的整个过程,最后分析块设备的直接I/O访问和缓存I/O访问. 二. 块设备基本结构体 ...

  9. LeetCode All in One 题目讲解汇总(持续更新中...)

    原文地址:https://www.cnblogs.com/grandyang/p/4606334.html 终于将LeetCode的大部分题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开 ...

最新文章

  1. 使Chrome接受自签名的本地主机证书
  2. 黑马程序员Linux系统开发视频之gdb调试方法
  3. 你以为 CSS 只是个简单的布局?装逼指南了解一下
  4. 【NLP傻瓜式教程】手把手带你CNN文本分类(附代码)
  5. MySQL子查询优化思路
  6. java多个按钮监听,如何改成监听多个按钮啊用e.getsource()
  7. 如何理解自然语言处理中的注意力机制? | 技术头条
  8. 【引用】mkswap 把一个分区格式化成为swap交换区
  9. 微信防撤回python代码_python实现微信防撤回神器
  10. 他们为啥说我没有数据分析思维?
  11. springboot建筑造价师资格考试应试网站设计与实现毕业设计源码260839
  12. aamp;m大学计算机科学,名校介绍丨美国 德克萨斯AM大学 Texas AM University
  13. 标题:我的中医自学历程(2013.8.26 更新网盘,欢迎下载和传播)
  14. govendor使用
  15. 采集京东网数据的10个经典方法
  16. hive时金额为科学记数法转为普通的数字
  17. iPS细胞的最新应用
  18. Wireless Power Tranmissions
  19. 深入浅出Linux操作系统搭建JavaEE环境(五)
  20. 百度搜狗SEO快速排名模拟点击工具-提升关键词排名

热门文章

  1. matlab 邦加球,吴先良(软件学院)老师 - 安徽大学
  2. GitHub构建Maven依赖仓库
  3. MVC3.0 中Razor 学习 cshtml文件
  4. 中测院能耗管理系统的设计及应用
  5. vue 父子组件mounted执行顺序
  6. 【智能优化】禁忌搜索算法(Matlab代码实现)
  7. 商业级、工业级、军品级、宇航级CPU有着不同标准
  8. 【jzoj2182】羊羊吃草
  9. 面向对象编写一个计算器
  10. 利用FME PythonCaller调用7z解压压缩包