zoukankan      html  css  js  c++  java
  • Leetcode: Find Right Interval

    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, Data Stream as Disjoint Intervals 就是

    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<Integer, Integer> map = new TreeMap<Integer, Integer>();
    15         for (int i=0; i<intervals.length; i++) {
    16             map.put(intervals[i].start, i);
    17         }
    18         for (int i=0; i<intervals.length; i++) {
    19             Interval cur = intervals[i];
    20             Map.Entry<Integer, Integer> 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

  • 相关阅读:
    jQuery offset获取坐标不精确的问题
    RPG Maker VX地图随机气泡对话 Ver1.0
    Qt绘图控件qwt绘制等比例坐标图
    Java服务端极光推送整合Ios、Android
    Jpush给 iOS 平台推送 title 值失败
    java之Hibenate中监听事件的重写和二级cache缓存
    java之Hibeante中SQL语句的使用
    Hibernate注解符合主键关联关系、持久化传播、继承映射
    hibernate之数据库注解关联关系
    hibernate(四) 双向多对多映射关系
  • 原文地址:https://www.cnblogs.com/EdwardLiu/p/6139796.html
Copyright © 2011-2022 走看看