首页 > 其他分享 >436. 寻找右区间--LeetCode_二分

436. 寻找右区间--LeetCode_二分

时间:2022-08-19 20:22:34浏览次数:84  
标签:二分 vector -- res 区间 intervals 端点 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;
    }
};

标签:二分,vector,--,res,区间,intervals,端点,436,LeetCode
From: https://www.cnblogs.com/MZ0o0/p/16603220.html

相关文章

  • 哈希
    字符串哈希哈希是一种高效判断字符串相等的算法,准确来说是子串,因为预处理需要\(O(n)\),自然是多次使用才划算常见的哈希式是\(\suma_ibase^i(mod\mod)\)即选取一个......
  • 绿软之家-Windows11专业版 22000.856 适度精简8月版
    PS:系统采用UUP网站提供的8月最新版经过适度精简优化制作,为了系统的稳定性,只精简掉了一些使用率极低的组件,保留了微软安全中心的组件(主要是现在的技术不够,不能彻底精简掉......
  • 2022-08-19 第四组 王佳齐 学习笔记
    思维导图学习笔记PreparedStatement:预编译(预加载)接口2.事务处理可以用来维护数据的完整性。保证sql语句要么全执行,要么全部不执行。1.通过conn获取的对象2.是Stateme......
  • AlexNet论文笔记
    AlexNet1.Introduction提升目标识别的模型的表现,需要大规模的数据集,更强大的模型以及更好的避免过拟合的方法。当前模型在小的数据集上对简单的识别任务已经能表现得很......
  • awk判断整除,取绝对值,按位分割
    awk的内置函数不算多,没有直接的函数可以判断整除,取绝对值,按位分割,因此实现这些功能需要借助其他函数awk判断整除用int取整函数实现#判断输入数字能否被3整除echo-e"2......
  • FTCL:Fine-grained Temporal Contrastive Learning for Weakly-supervised Temporal Ac
    1.针对的问题现有的方法主要遵循于通过优化视频级分类目标来实现定位的方式,这些方法大多忽略了视频之间丰富的时序对比关系,因此在分类学习和分类-定位自适应的过程中......
  • SQLAlchemy学习-9.一对多和多对一关系
    前言一对多和多对一关系一对多关系一对多关系表设计,一个Parent类关联多个Child类fromsqlalchemy.ext.declarativeimportdeclarative_basefromsqlalchemyimportc......
  • 2022-08-19 记录一下 奥睿科 2.5/3.5英寸双盘位USB3.0硬盘底座 使用感受
    什么?电脑识别不了硬盘???我把京东客服给骂了,再到我写这个随笔的时候,有点心疼那个京东客服。为了扩容,昨天入手了希捷的2t机械家用盘,以及这次的主角奥睿科硬盘底座,简称硬盘盒......
  • lvgl8.3移植arduino-以esp32为例 lvgl库里例程的使用(踩坑记录)
    这次实验使用最新的lvgl,目前是8.3.1  依旧是先配置好espi,确保显示正常,并运行TFT_eSPI库中的Generic->Touch_calibrate示例获得屏幕触摸数据添加lvlg库 ,最好也......
  • AVL树的根(平衡二叉搜索树)
    https://www.acwing.com/problem/content/1554/思路:感觉这个左旋,右旋有些抽象,不好理解记忆,硬记也不好,当整个代码不算难写,因为很多部分都是堆成的。#include<iostream>......