436. 寻找右区间--LeetCode_二分
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/find-right-interval
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题目大意是这样的
数组中的元素由一个区间组成(包含一个左端点和右端点),左端点一定是唯一的
找到每个元素的右区间
举个例子
假设区间A为[1,2],那么区间A的右区间最好就是[2,3]
也就是说区间A右区间的左端点是大于等于区间A右端点的最小数
二分思路
从暴力算法上看,开销最大的部分就是枚举右区间
如果事先记录数组intervals的左端点并排序,那么右区间就可以二分(有序就可以二分)
代码如下
class Solution {
public:
vector<int> findRightInterval(vector<vector<int>>& intervals) {
vector<int> res;
// intervals的长度为1时要做特判
if(intervals.size()==1){
res.push_back(-1);
return res;
}
// 记录intervals中每个区间的左端点和该端点在哪个区间
vector<pair<int,int>> tmp;
for(int i=0;i<intervals.size();i++)
tmp.push_back({intervals[i][0],i});
// 将这些端点排序
sort(tmp.begin(),tmp.end());
for(int i=0;i<intervals.size();i++){
int l=0,r=tmp.size()-1,mid;
// 二分寻找对应的左端点
while(l<r){
mid = (l+r)/2;
if(tmp[mid].first>=intervals[i][1])r=mid;
else l=mid+1;
}
// 如果找到的左端点小于区间i的右端点就记录左端点所在区间
// 否则记为-1 表示区间i没有右区间
if(tmp[l].first>=intervals[i][1])res.push_back(tmp[l].second);
else res.push_back(-1);
}
return res;
}
};
436. 寻找右区间--LeetCode_二分的更多相关文章
- 436. 寻找右区间--LeetCode_暴力
来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/find-right-interval 著作权归领扣网络所有.商业转载请联系官方授权,非商业转载请注明出 ...
- Java实现 LeetCode 436 寻找右区间
436. 寻找右区间 给定一组区间,对于每一个区间 i,检查是否存在一个区间 j,它的起始点大于或等于区间 i 的终点,这可以称为 j 在 i 的"右侧". 对于任何区间,你需要存 ...
- Leetcode 436.寻找右区间
寻找右区间 给定一组区间,对于每一个区间 i,检查是否存在一个区间 j,它的起始点大于或等于区间 i 的终点,这可以称为 j 在 i 的"右侧". 对于任何区间,你需要存储的满足条 ...
- 436 Find Right Interval 寻找右区间
给定一组区间,对于每一个区间 i,检查是否存在一个区间 j,它的起始点大于或等于区间 i 的终点,这可以称为 j 在 i 的“右侧”.对于任何区间,你需要存储的满足条件的区间 j 的最小索引,这意味着 ...
- [Swift]LeetCode436. 寻找右区间 | Find Right Interval
Given a set of intervals, for each of the interval i, check if there exists an interval j whose star ...
- 【LeetCode】寻找右区间
[问题] 给定一组区间,对于每一个区间 i,检查是否存在一个区间 j,它的起始点大于或等于区间 i 的终点,这可以称为 j 在 i 的“右侧”. 对于任何区间,你需要存储的满足条件的区间 j 的最小索 ...
- [LeetCode] 436. Find Right Interval 找右区间
Given a set of intervals, for each of the interval i, check if there exists an interval j whose star ...
- 编程思想与算法leetcode_二分算法详解
二分算法通常用于有序序列中查找元素: 有序序列中是否存在满足某条件的元素: 有序序列中第一个满足某条件的元素的位置: 有序序列中最后一个满足某条件的元素的位置. 思路很简单,细节是魔鬼. 二分查找 一 ...
- [LeetCode] Find Right Interval 找右区间
Given a set of intervals, for each of the interval i, check if there exists an interval j whose star ...
随机推荐
- .NET Core中JWT+Auth2.0实现SSO,附完整源码(.NET6)
一.简介 单点登录(SingleSignOn,SSO) 指的是在多个应用系统中,只需登录一次,就可以访问其他相互信任的应用系统. JWT Json Web Token,这里不详细描述,简单说是一种认证 ...
- DYOJ 【20220303模拟赛】最少分组 题解
最少分组 题意 \(n\) 个点 \(m\) 条边的无向图,可以删掉 0 条或多条边,求满足条件的最小连通块数量: 对每个顶点对 \((a,b)\) ,若 \(a\) 和 \(b\) 同属于一个连通块 ...
- (数据科学学习手札138)使用sklearnex大幅加速scikit-learn运算
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,scikit-learn作为经 ...
- 1.2 操作系统的第二个功能——并发功能 -《zobolの操作系统学习札记》
1.2 操作系统的第二个功能--并发功能 目录 1.2 操作系统的第二个功能--并发功能 问1:什么是并发功能?并发功能是必要的吗? 问2:并发功能必须要求拥有多核CPU吗? 问3:多核CPU和单核C ...
- RPA应用场景-自动轮询汇总报表
场景概述 自动轮询汇总报表 所涉系统名称 券商披露网站 人工操作(时间/次) 36小时 所涉人工数量 1 操作频率 每月 场景流程 1.每月初机器人自动登录网站轮询36家券商披露的财务报告,并下载 2 ...
- windows下docker部署报错
报错信息:Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:8848 -> 0.0.0 ...
- 8. SparkSQL综合作业
综合练习:学生课程分数 网盘下载sc.txt文件,分别创建RDD.DataFrame和临时表/视图: 分别用RDD操作.DataFrame操作和spark.sql执行SQL语句实现以下数据分析: 总共 ...
- NC14326 Rails
NC14326 Rails 题目 题目描述 There is a famous railway station in PopPush City. Country there is incredibly ...
- Collections集合工具类的方法_sort(List)和sort(List,Comparator)方法
Comparator比较器 我们还是先研究这个方法 public static <T> void sort(List<T> list):将集合中元素按照默认规则排序. 不过这次 ...
- AlterNats是如何做到高性能的发布订阅的?
前言 在过去的一些文章里面,我们聊了一些.NET平台上高性能编程的技巧,今天带大家了解一下AlterNats这个库是如何做到远超同类SDK性能的. NATS:NATS是一个开源.轻量级.高性能的分布式 ...