Leetcode 436.寻找右区间
寻找右区间
给定一组区间,对于每一个区间 i,检查是否存在一个区间 j,它的起始点大于或等于区间 i 的终点,这可以称为 j 在 i 的"右侧"。
对于任何区间,你需要存储的满足条件的区间 j 的最小索引,这意味着区间 j 有最小的起始点可以使其成为"右侧"区间。如果区间 j 不存在,则将区间 i 存储为 -1。最后,你需要输出一个值为存储的区间值的数组。
注意:
- 你可以假设区间的终点总是大于它的起始点。
- 你可以假定这些区间都不具有相同的起始点。
示例 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.寻找右区间相关推荐
- LeetCode 436. 寻找右区间(二分查找)
1. 题目 给定一组区间,对于每一个区间 i,检查是否存在一个区间 j,它的起始点大于或等于区间 i 的终点,这可以称为 j 在 i 的"右侧". 对于任何区间,你需要存储的满足条 ...
- leetcode 436. Find Right Interval | 436. 寻找右区间(二分查找不小于某值的第一个位置)
题目 https://leetcode.com/problems/find-right-interval/ 题解 这题考察点不难,就是个普通的二分查找.详细过程是: 因为 start 是唯一的,所以先 ...
- leetcode436. 寻找右区间(二分法)
给定一组区间,对于每一个区间 i,检查是否存在一个区间 j,它的起始点大于或等于区间 i 的终点,这可以称为 j 在 i 的"右侧". 对于任何区间,你需要存储的满足条件的区间 j ...
- 【手绘漫画】图解LeetCode之寻找重复数(LeetCode287题),抽屉原理
文章目录 图解LeetCode刷题计划 1.写在前面 2.题目 3.正文 4.代码 5.讨论 图解LeetCode刷题计划 1.写在前面 手绘漫画系列正式上线!!!"图解LeetCode刷题 ...
- [二分搜索|快速选择] leetcode 4 寻找两个正序数组的中位数
[二分搜索|快速选择] leetcode 4 寻找两个正序数组的中位数 1.题目 题目链接 给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2.请你找出并返回这两个正序数组 ...
- LeetCode 763. 划分字母区间
文章目录 解法1:记录最大最小下标 解法2:贪心 https://leetcode-cn.com/problems/partition-labels/ 难度:中等 字符串 S 由小写字母组成.我们 ...
- LeetCode 435. 无重叠区间(贪心/动态规划)
文章目录 1. 题目 2. 解题 2.1 贪心 2.2 动态规划 1. 题目 给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠. 注意: 可以认为区间的终点总是大于它的起点. 区间 ...
- 164. Leetcode 435. 无重叠区间 (贪心算法-贪心区间)
class Solution:def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:if len(interval ...
- LeetCode 04寻找两个正序数组的中位数(困难)二分法
题目描述: 呕心沥血的一个题解,点赞关注收藏,一键三联,一起加入我们打卡! 题目描述: 给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2. 请你找出这两个正序数组的中位数 ...
最新文章
- 【数据结构】支持四则混合运算的计算器(转)
- 使用OpenCV实现图像增强
- elasticsearch组件的安装启动,测试等(windows)
- docker -v 覆盖了容器中的文件_浅谈docker中宿主机和容器之间互相copy文件的两种方式,欢迎补充...
- python3怎么使用pyrex_用户指南 - Cython 和 Pyrex 之间的区别 - 《Cython 3.0 中文文档》 - 书栈网 · BookStack...
- eBPF学习记录(三)使用BCC开发eBPF程序
- 基于SSM的小说阅读网站
- ArrayList类的使用方法
- Oracle单实例开机自启动
- 【电路基础】第1章-电路的基本规律(1)
- 计算机管理如何格式化u盘,u盘无法格式化?0字节?教你5种方法格式化u盘,超简单!...
- python论坛签到_python简单实现网站打卡签到
- Creo 9.0 基准特征:基准轴
- python和ruby对比
- 【源码共享】我花2小时写了微信官网的响应式布局HTML+CSS 换成旅行主题风格更炫酷了
- 扇贝python课程打卡_Learning by doing——百日“扇贝打卡” 历程展望
- 拯救者15isk加装固态硬盘
- 虚拟机配置DNS服务器
- ArcGIS 制图搭配:文字、比例尺等大小
- PreAngel投资过的公司列表
热门文章
- is_callable — 检测参数是否为合法的可调用结构
- AspectJ Join Point Matching based on Annotations
- 基于ArcGIS API for JavaScript加载天地图
- Linux 查看命令路径 以及相关信息
- Java一致性Hash算法的实现
- 使用Nomad构建弹性基础架构:计划和自我修复
- Linux下一些实用的操作记录
- android编程获取网络和wifi状态及调用网络设置界面,Android编程获取网络连接状态(3G/Wifi)及调用网络配置界面 - Android平台开发技术 - 博客园...
- java 1.7升级到1.8_CentOS openJdk1.7升级1.8
- 四部门发文!坚决避免数据中心盲目无序发展