寻找右区间

给定一组区间,对于每一个区间 i,检查是否存在一个区间 j,它的起始点大于或等于区间 i 的终点,这可以称为 j 在 i 的"右侧"。

对于任何区间,你需要存储的满足条件的区间 j 的最小索引,这意味着区间 j 有最小的起始点可以使其成为"右侧"区间。如果区间 j 不存在,则将区间 i 存储为 -1。最后,你需要输出一个值为存储的区间值的数组。

注意:

  1. 你可以假设区间的终点总是大于它的起始点。
  2. 你可以假定这些区间都不具有相同的起始点。

示例 1:

输入: [ [1,2] ]

输出: [-1]

解释:集合中只有一个区间,所以输出-1。

示例 2:

输入: [ [3,4], [2,3], [1,2] ]

输出: [-1, 0, 1]

解释:对于[3,4],没有满足条件的"右侧"区间。

对于[2,3],区间[3,4]具有最小的"右"起点;

对于[1,2],区间[2,3]具有最小的"右"起点。

示例 3:

输入: [ [1,4], [2,3], [3,4] ]

输出: [-1, 2, -1]

解释:对于区间[1,4]和[3,4],没有满足条件的"右侧"区间。

对于[2,3],区间[3,4]有最小的"右"起点。

解题思路

利用java TreeMap的性质,把所有区间的左边界作为key值,所在位置作为value值,保存在map中,利用TreeMap中已有的ceilingKey(key k)方法,直接获取与给定key大且最近的key值,然后通过key值得到位置。

 1 /**
 2  * Definition for an interval.
 3  * public class Interval {
 4  *     int start;
 5  *     int end;
 6  *     Interval() { start = 0; end = 0; }
 7  *     Interval(int s, int e) { start = s; end = e; }
 8  * }
 9  */
10 import java.util.TreeMap;
11
12 public class Solution{
13     public int[] findRightInterval(Interval[] intervals){
14         int len=intervals.length;
15         int nums[]=new int[len];
16         TreeMap<Integer,Integer> map=new TreeMap<Integer,Integer>();
17         for(int i=0;i<len;i++){
18             map.put(intervals[i].start,i);
19         }
20         for(int i=0;i<len;i++){
21             Integer num=map.ceilingKey(intervals[i].end);
22             if(num==null){
23                 nums[i]=-1;
24             }else{
25                 nums[i]=map.get(num);
26             }
27         }
28         return nums;
29     }
30 }

转载于:https://www.cnblogs.com/kexinxin/p/10269825.html

Leetcode 436.寻找右区间相关推荐

  1. LeetCode 436. 寻找右区间(二分查找)

    1. 题目 给定一组区间,对于每一个区间 i,检查是否存在一个区间 j,它的起始点大于或等于区间 i 的终点,这可以称为 j 在 i 的"右侧". 对于任何区间,你需要存储的满足条 ...

  2. leetcode 436. Find Right Interval | 436. 寻找右区间(二分查找不小于某值的第一个位置)

    题目 https://leetcode.com/problems/find-right-interval/ 题解 这题考察点不难,就是个普通的二分查找.详细过程是: 因为 start 是唯一的,所以先 ...

  3. leetcode436. 寻找右区间(二分法)

    给定一组区间,对于每一个区间 i,检查是否存在一个区间 j,它的起始点大于或等于区间 i 的终点,这可以称为 j 在 i 的"右侧". 对于任何区间,你需要存储的满足条件的区间 j ...

  4. 【手绘漫画】图解LeetCode之寻找重复数(LeetCode287题),抽屉原理

    文章目录 图解LeetCode刷题计划 1.写在前面 2.题目 3.正文 4.代码 5.讨论 图解LeetCode刷题计划 1.写在前面 手绘漫画系列正式上线!!!"图解LeetCode刷题 ...

  5. [二分搜索|快速选择] leetcode 4 寻找两个正序数组的中位数

    [二分搜索|快速选择] leetcode 4 寻找两个正序数组的中位数 1.题目 题目链接 给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2.请你找出并返回这两个正序数组 ...

  6. LeetCode 763. 划分字母区间

    文章目录 解法1:记录最大最小下标 解法2:贪心 https://leetcode-cn.com/problems/partition-labels/ 难度:中等   字符串 S 由小写字母组成.我们 ...

  7. LeetCode 435. 无重叠区间(贪心/动态规划)

    文章目录 1. 题目 2. 解题 2.1 贪心 2.2 动态规划 1. 题目 给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠. 注意: 可以认为区间的终点总是大于它的起点. 区间 ...

  8. 164. Leetcode 435. 无重叠区间 (贪心算法-贪心区间)

    class Solution:def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:if len(interval ...

  9. LeetCode 04寻找两个正序数组的中位数(困难)二分法

    题目描述: 呕心沥血的一个题解,点赞关注收藏,一键三联,一起加入我们打卡! 题目描述: 给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2. 请你找出这两个正序数组的中位数 ...

最新文章

  1. 【数据结构】支持四则混合运算的计算器(转)
  2. 使用OpenCV实现图像增强
  3. elasticsearch组件的安装启动,测试等(windows)
  4. docker -v 覆盖了容器中的文件_浅谈docker中宿主机和容器之间互相copy文件的两种方式,欢迎补充...
  5. python3怎么使用pyrex_用户指南 - Cython 和 Pyrex 之间的区别 - 《Cython 3.0 中文文档》 - 书栈网 · BookStack...
  6. eBPF学习记录(三)使用BCC开发eBPF程序
  7. 基于SSM的小说阅读网站
  8. ArrayList类的使用方法
  9. Oracle单实例开机自启动
  10. 【电路基础】第1章-电路的基本规律(1)
  11. 计算机管理如何格式化u盘,u盘无法格式化?0字节?教你5种方法格式化u盘,超简单!...
  12. python论坛签到_python简单实现网站打卡签到
  13. Creo 9.0 基准特征:基准轴
  14. python和ruby对比
  15. 【源码共享】我花2小时写了微信官网的响应式布局HTML+CSS 换成旅行主题风格更炫酷了
  16. 扇贝python课程打卡_Learning by doing——百日“扇贝打卡” 历程展望
  17. 拯救者15isk加装固态硬盘
  18. 虚拟机配置DNS服务器
  19. ArcGIS 制图搭配:文字、比例尺等大小
  20. PreAngel投资过的公司列表

热门文章

  1. is_callable — 检测参数是否为合法的可调用结构
  2. AspectJ Join Point Matching based on Annotations
  3. 基于ArcGIS API for JavaScript加载天地图
  4. Linux 查看命令路径 以及相关信息
  5. Java一致性Hash算法的实现
  6. 使用Nomad构建弹性基础架构:计划和自我修复
  7. Linux下一些实用的操作记录
  8. android编程获取网络和wifi状态及调用网络设置界面,Android编程获取网络连接状态(3G/Wifi)及调用网络配置界面 - Android平台开发技术 - 博客园...
  9. java 1.7升级到1.8_CentOS openJdk1.7升级1.8
  10. 四部门发文!坚决避免数据中心盲目无序发展