寻找右区间

给定一组区间,对于每一个区间 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值得到位置。

 /**
* Definition for an interval.
* public class Interval {
* int start;
* int end;
* Interval() { start = 0; end = 0; }
* Interval(int s, int e) { start = s; end = e; }
* }
*/
import java.util.TreeMap; public class Solution{
public int[] findRightInterval(Interval[] intervals){
int len=intervals.length;
int nums[]=new int[len];
TreeMap<Integer,Integer> map=new TreeMap<Integer,Integer>();
for(int i=0;i<len;i++){
map.put(intervals[i].start,i);
}
for(int i=0;i<len;i++){
Integer num=map.ceilingKey(intervals[i].end);
if(num==null){
nums[i]=-1;
}else{
nums[i]=map.get(num);
}
}
return nums;
}
}

最新文章

  1. 动态选路、RIP协议&amp;&amp;OSPF协议详解
  2. input失去隐藏光标(移动端)
  3. SILVERLIGHT 应急卫生模拟演练项目之GRID布局
  4. BurpSuite的使用总结
  5. 在MacOX下安装python-opencv
  6. Mysql limit offset
  7. Java、JVM和操作系统之间的关系,写给新人,
  8. react-redux知识点
  9. 火车车次查询-余票查询--Api接口
  10. Android界面刷新方法
  11. 论山寨手机与Android 【15】结束语
  12. 【转】关于UItableViewCell的accessoryType属性
  13. Lynis 2.2.0 :面向Linux系统的安全审查和扫描工具
  14. hadoop yarn 易理解
  15. Hibernate中的实体映射
  16. According to TLD or attribute directive in tag file, attribute value does not accept any expressions报错解决办法
  17. ASP.NETMVC 分页
  18. 在vue里添加好看的lottie动画 (^_^)
  19. 如何判断Linux是32位还是64位
  20. Java Map 集合实现类

热门文章

  1. redis自启动配置详解
  2. 在Windows Server 2012中搭建SQL Server 2012故障转移集群
  3. no pointer in java
  4. 修改Windows默认调试器
  5. beta版和alpha版
  6. db2的定时备份
  7. Bootstrap历练实例:激活导航状态
  8. java从键盘输入三个整数,实现从小到大排序
  9. ARC中__weak;__strong;__unsafe_unretained;修饰词
  10. Android读书笔记三