zoukankan      html  css  js  c++  java
  • LeetCode 436. Find Right Interval

    原题链接在这里:https://leetcode.com/problems/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:

    1. You may assume the interval's end point is always bigger than its start point.
    2. 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.
    

    NOTE: input types have been changed on April 15, 2019. Please reset to default code definition to get new method signature.

    题解:

    Use a TreeMap tm to stroe mappings between interval start and index i.

    For each interval, find ceiling key on interval's end. That would be the first right interval.

    Time Complexity: O(nlogn). n = intervals.length.

    Space: O(n).

    AC Java: 

     1 class Solution {
     2     public int[] findRightInterval(int[][] intervals) {
     3         if(intervals == null || intervals.length == 0){
     4             return new int[0];
     5         }
     6         
     7         int n = intervals.length;
     8         int [] res = new int[n];
     9         TreeMap<Integer, Integer> tm = new TreeMap<>();
    10         for(int i = 0; i<n; i++){
    11             tm.put(intervals[i][0], i);
    12         }
    13         
    14         for(int i = 0; i<n; i++){
    15             Integer key = tm.ceilingKey(intervals[i][1]);
    16             if(key == null){
    17                 res[i] = -1;
    18             }else{
    19                 res[i] = tm.get(key);
    20             }
    21         }
    22         
    23         return res;
    24     }
    25 }
  • 相关阅读:
    定制一个类似地址选择器的view
    3D版翻页公告效果
    一分钟搞定触手app主页酷炫滑动切换效果
    苹果版小黄车(ofo)app主页菜单效果
    基于SpringMVC+Ext.js的权限管理系统(无权限框架)
    使用 mybatis + flying-0.9.4 的电商后端
    iOS仿支付宝首页效果
    Android蓝牙
    JavaWeb Session详解
    原生JS实现的h5小游戏-植物大战僵尸
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/11921663.html
Copyright © 2011-2022 走看看