LeetCode_715. Range Module
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相关推荐
- 715. Range Module
715. Range Module 题目描述:A Range Module is a module that tracks ranges of numbers. Your task is to des ...
- C#LeetCode刷题-数组
数组篇 # 题名 刷题 通过率 难度 1 两数之和 C#LeetCode刷题之#1-两数之和(Two Sum) 43.1% 简单 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组 ...
- [转]python各模块的学习
[-] 01 关于本书 02 代码约定 03 关于例子 04 如何联系我们 1 核心模块 11 介绍 111 内建函数和异常 112 操作系统接口模块 113 类型支持模块 114 正则表达式 115 ...
- leetcode算法练习 JavaScript实现
leetcode 表格内容由spider.js从leetcode-cn.com爬取. 已做题目答案也从leetcode-cn.com中爬取并生成文件. 解题进度:已解决 140/637 - 简单 94 ...
- Linux输入输出系统原理笔记
一.输入与输出 1. 对于操作系统来讲,控制各种输入输出设备是一件复杂的事情,因为这么多设备,形状.用法.功能都不一样.因此,CPU并不直接和设备打交道,它们中间有一个叫作设备控制器(Device C ...
- leetcode 题解 (500-1000题,持续更新,part 2)
part1(1-500), part3(1000-*) 502. IPO 题意:给定k,w,profits数组和capital数组.k表示最多可完成的任务数.w是初始资本.profits是各个任务的收 ...
- 合并区间 · Merge Intervals 插入区间 · Insert Interval
[抄题]: 给出若干闭合区间,合并所有重叠的部分. 给出的区间列表 => 合并后的区间列表: [ [[1, 3], [1, 6],[2, 6], => [8, 10],[8, 10], [ ...
- Linux操作系统学习笔记(十四)块设备
一. 前言 上文我们分析了字符设备,本文接着分析块设备.我们首先分析块设备的基本结构体,然后分析块设备生成.加载的整个过程,最后分析块设备的直接I/O访问和缓存I/O访问. 二. 块设备基本结构体 ...
- LeetCode All in One 题目讲解汇总(持续更新中...)
原文地址:https://www.cnblogs.com/grandyang/p/4606334.html 终于将LeetCode的大部分题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开 ...
最新文章
- 使Chrome接受自签名的本地主机证书
- 黑马程序员Linux系统开发视频之gdb调试方法
- 你以为 CSS 只是个简单的布局?装逼指南了解一下
- 【NLP傻瓜式教程】手把手带你CNN文本分类(附代码)
- MySQL子查询优化思路
- java多个按钮监听,如何改成监听多个按钮啊用e.getsource()
- 如何理解自然语言处理中的注意力机制? | 技术头条
- 【引用】mkswap 把一个分区格式化成为swap交换区
- 微信防撤回python代码_python实现微信防撤回神器
- 他们为啥说我没有数据分析思维?
- springboot建筑造价师资格考试应试网站设计与实现毕业设计源码260839
- aamp;m大学计算机科学,名校介绍丨美国 德克萨斯AM大学 Texas AM University
- 标题:我的中医自学历程(2013.8.26 更新网盘,欢迎下载和传播)
- govendor使用
- 采集京东网数据的10个经典方法
- hive时金额为科学记数法转为普通的数字
- iPS细胞的最新应用
- Wireless Power Tranmissions
- 深入浅出Linux操作系统搭建JavaEE环境(五)
- 百度搜狗SEO快速排名模拟点击工具-提升关键词排名