博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Leetcode: Find Right Interval
阅读量:6613 次
发布时间:2019-06-24

本文共 2799 字,大约阅读时间需要 9 分钟。

Given a set of intervals, for each of the interval i, check if there exists an interval j whose start point is bigger than or equal to the end point of the interval i, which can be called that j is on the "right" of i.For any interval i, you need to store the minimum interval j's index, which means that the interval j has the minimum start point to build the "right" relationship for interval i. If the interval j doesn't exist, store -1 for the interval i. Finally, you need output the stored value of each interval as an array.Note:You may assume the interval's end point is always bigger than its start point.You may assume none of these intervals have the same start point.Example 1:Input: [ [1,2] ]Output: [-1]Explanation: There is only one interval in the collection, so it outputs -1.Example 2:Input: [ [3,4], [2,3], [1,2] ]Output: [-1, 0, 1]Explanation: There is no satisfied "right" interval for [3,4].For [2,3], the interval [3,4] has minimum-"right" start point;For [1,2], the interval [2,3] has minimum-"right" start point.Example 3:Input: [ [1,4], [2,3], [3,4] ]Output: [-1, 2, -1]Explanation: There is no satisfied "right" interval for [1,4] and [3,4].For [2,3], the interval [3,4] has minimum-"right" start point.

Solution 1: TreeMap,      Time complexity: O(NlogN)

像这种在一个集合里面寻找有没有比某个数小的数,一般要么treeMap要么treeSet。Interval的题经常需要用treeMap,  就是

This implementation provides guaranteed log(n) time cost for the containsKeygetput and remove operations. 

map.higherEntry(key) 找到的是一个entry with least key strictly greater than the given key, 所以20行要减一,因为interval.start可能跟current interval.end重合

用map.cellingEntry(key)找的就是一个entry with least key greater than or equal to the given key

map.lowerKey(key) Returns the greatest key strictly less than the given key, or null if there is no such key.

map.floorKey(key) Returns the greatest key less than or equal to the given key, or null if there is no such 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 public class Solution {11     public int[] findRightInterval(Interval[] intervals) {12         if(intervals==null || intervals.length==0) return null;13         int[] res = new int[intervals.length];14         TreeMap
map = new TreeMap
();15 for (int i=0; i
entry = map.higherEntry(cur.end-1);21 if (entry != null) {22 res[i] = entry.getValue();23 }24 else res[i] = -1;25 }26 return res;27 }28 }

 

Solution 2: Sweep Line Solution(未深究), Time Complexity: O(NlogN)

https://discuss.leetcode.com/topic/65585/java-sweep-line-solution-o-nlogn

转载地址:http://daaso.baihongyu.com/

你可能感兴趣的文章
springboot docker笔记
查看>>
mysql char和varchar区别
查看>>
Modbus RTU 通信工具设计
查看>>
服务化改造实践 | 如何在 Dubbo 中支持 REST
查看>>
Logwatch linux日志监视器解析
查看>>
【第8章】JVM内存管理
查看>>
在绿色的河流上
查看>>
ovirt官方安装文档 附录G
查看>>
磁盘故障小案例
查看>>
了解相关.NET Framework不同组件区别及安装知识
查看>>
ToughRADIUS快速指南
查看>>
HTML
查看>>
【转】左手坐标系和右手坐标系
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
POJ 3335 Rotating Scoreboard 半平面交
查看>>
window.location.href和window.location.replace的区别
查看>>
《Gamestorming》读书笔记
查看>>
域名和网址链接被微信浏览器拦截怎么办 微信屏蔽网址打开如何解决
查看>>
使用SQL Server Analysis Services数据挖掘的关联规则实现商品推荐功能(二)
查看>>