436. 寻找右区间

给你一个区间数组 intervals ,其中 intervals[i] = [starti, endi] ,且每个 starti 都 不同 。

区间 i 的 右侧区间 可以记作区间 j ,并满足 startj >= endi ,且 startj 最小化 。

返回一个由每个区间 i 的 右侧区间 的最小起始位置组成的数组。如果某个区间 i 不存在对应的 右侧区间 ,则下标 i 处的值设为 -1 。

示例 1:

输入:intervals = [[1,2]]
输出:[-1]
解释:集合中只有一个区间,所以输出-1。
示例 2:

输入:intervals = [[3,4],[2,3],[1,2]]
输出:[-1,0,1]
解释:对于 [3,4] ,没有满足条件的“右侧”区间。
对于 [2,3] ,区间[3,4]具有最小的“右”起点;
对于 [1,2] ,区间[2,3]具有最小的“右”起点。
示例 3:

输入:intervals = [[1,4],[2,3],[3,4]]
输出:[-1,2,-1]
解释:对于区间 [1,4] 和 [3,4] ,没有满足条件的“右侧”区间。
对于 [2,3] ,区间 [3,4] 有最小的“右”起点。

提示:

1 <= intervals.length <= 2 * 104
intervals[i].length == 2
-106 <= starti <= endi <= 106
每个间隔的起点都不相同

思路:整个题目就是想让你寻找对于每一个区间,是否有下一个离它最近的右区间,有就返回对应区间在原数组的位置,否则就是-1,另外题目强调了每个区间的起点不同,所以只需要找比当前区间的终点大的最小起点,然后通过起点去找到对应区间的位置,这个可以用一个HashMap实现,要找到比某个数大的最小数,可以用二分法实现,就是把所有区间的起点都排好序,找到第一个大于等于给定的终点的起点的位置。综上,整道题可以用HashMap+二分法来完成

class Solution {public int[] findRightInterval(int[][] intervals) {int[] res = new int[intervals.length];Map<Integer,Integer> map = new HashMap<>();int[] starts = new int[intervals.length];//把起点独立出来,并且记录好对应位置for(int i=0;i<intervals.length;i++){starts[i] = intervals[i][0];map.put(starts[i],i);}Arrays.sort(starts);//排序for(int i=0;i<intervals.length;i++){int num = search(intervals[i][1],starts);res[i] = num==-1?-1:map.get(starts[num]);}return res;}//二分查找public int search(int target,int[] nums){int left = 0;int right = nums.length-1;while(left<right){int mid = left+(right-left)/2;if(nums[mid]<target){left = mid+1;}else{right = mid;}}if(nums[left]<target){return -1;}return left;}
}

2022-05-20每日一题相关推荐

  1. 【LeetCode】2022 7月 每日一题

    [LeetCode]2022 7月 每日一题 前言 七月太忙了,又是项目又是练车又是各种比赛.大概有10天的每日一题没有当天写完(虽然后面补上了). 将每日一题的所有思路记录在这里分享一下. 7.1 ...

  2. 2022夏暑假每日一题(八)

    一. 统计单词(字符串处理) 双指针写法: cin写法 二.进制转换(进位制) 写法一:cin>>hex>>x,表示后面的数为十六进制 写法二:手动转进制 三.切木棍(推公式) ...

  3. 2022.4.30每日一题

    一.每日一题 908. 最小差值 I 给你一个整数数组 nums,和一个整数 k . 在一个操作中,您可以选择 0 <= i < nums.length 的任何索引 i .将 nums[i ...

  4. 2022.10.14每日刷题打卡

    リモコン 题意: 题目描述: 高桥君要调整空调的设定温度.现在的设定温度是A度,而他想调到B度. 空调遥控器按一次可以: 上调或下调1度 上调或下调5度 上调或下调10度 高桥君想求出从A调到B度的最 ...

  5. 2022.11.14每日刷题打卡

    过山车 原题链接:传送门 二分图最大匹配模板题,但sb了数组开小了一直TLE,虽然是模板但很长教训. #include <bits/stdc++.h> using namespace st ...

  6. 2021/05/05 OJ每日一题 2132: Tmk吃汤饭 python

    2132: Tmk吃汤饭: Tmk喜欢吃汤饭! Tmk喜欢吃汤饭!! Tmk喜欢吃汤饭!!! 汤饭窗口分点餐和取餐两个窗口,一位蜀黍负责点餐窗口,一位蜀黍负责煮汤,一位蜀黍负责打饭,点餐需要1个单位时 ...

  7. 2022/6/26每日一题———黑名单中的随机数

    题目: 黑名单中的随机数 个人思路: 直接得到0~n范围一个随机数,然后判断是不是在黑名单里面,不在的话就输出,在的话就重复执行pick()函数.缺点很明显,如果得到了一个随机数在黑名单中,那我们就需 ...

  8. 4.20每日一题之三连击(洛谷c++)|dfs搜索

  9. 每日三题 12.20

    群公告 2022.12.19每日三题答案BDD 1.项目可交付成果已移交给客户,项目经理现在必须收集项目参与者的反馈意见.项目经理  应该查阅哪份文件来确定哪些人应该被包含进请求反馈意见的名单中?  ...

  10. 【每日一题】最大正方形面积——进阶,矩形面积

    2020/05/08 每日一题 221 最大正方形面积 是一道做过的题目出现在了每日一题,今后的每日一题我尽量把相关的题目都写一遍. 这道题目的思路并不是看到01矩阵就采用暴力的bfs方法,而是可以采 ...

最新文章

  1. 美多商城之商品(首页广告)
  2. JavaScript Array 对象方法
  3. 设为首页 收藏(IE可用)
  4. MyDataSourceUtils使用ThreadLocal对象
  5. 基于Sbo SDK的Add-on插件开发实例
  6. es6新特性之Map
  7. 关于设计RPC框架的几个问题
  8. 摆摊神器五菱荣光爆红后,上汽大通房车又成夜市新晋网红
  9. ROS学习笔记11(用C++写一个简单的消息发布和消息订阅)
  10. cube 一站式云原生开源机器学习平台
  11. 苹果cms10整合dplayer播放器
  12. c3p0 服务启动获取连接超时_一次c3p0连接池连接异常错误的排查
  13. STM32驱动AD9833
  14. 给定一个英文字符串,请写一段代码找出这个字符串中首先出现三次的那个英文字符(需要区分大小写)。
  15. 企业如何搭建商业智能BI,过程中又需要注意哪些事项
  16. 蓝精灵:寻找神秘村Smurfs: The Lost Village迅雷下载
  17. Android Glide加载网络图片不显示,但浏览器能打开图片
  18. dubbo(5) Dubbo源码解析之服务调用过程
  19. 使用傲梅分区助手无损合并分区,无损调整分区大小
  20. win7一点计算机就卡死,Win7系统卡屏假死怎么解决

热门文章

  1. hadoop Map 100% reduce 0% 问题
  2. 西门子串口通讯10-CP441-2在STEP7环境中做Modbus从站通讯
  3. 无线蓝牙耳机哪个牌子的好?无线蓝牙耳机分享
  4. 小白win10系统安装gtest流程
  5. 关于冒充我司名义从事诈骗活动的严重声明!
  6. ggplot2不要图例_ggplot2图例设置
  7. 讯飞语音识别demo实现
  8. Educoder JavaScript学习手册四:JS对象
  9. day04-商品分类及品牌
  10. linux 起网口up_linux网卡操作命令 ,查看Linux下网卡连接状态(up还是down)?