• LeetCode 436. Find Right Interval


    436. Find Right Interval

    Description Submission Solutions Add to List

    • Total Accepted: 7209
    • Total Submissions: 17507
    • Difficulty: Medium
    • Contributors: love_FDU_llp

    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.
    

    Subscribe to see which companies asked this question.

    【题目分析】

    这个题目的意思是:给定一系列的区间,对于任意一个区间,在所有区间中找到一个区间的起始点大于等于当前区间的结束点,并且要求这两个点最接近。

    【思路】

    首先对所有区间的起始点进行排序,然后对于每一个区间使用二分查找来找到与这个区间结束点最接近的起始点的区间,并且获得该区间的索引。

    【实现】

    在讨论区看到java的解法好多是用TreeMap来实现的,这样的实现代码简洁,但是要求大家对java比较熟练。

     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         int[] result = new int[intervals.length];
    13         
    14         TreeMap<Integer, Integer> treemap = new TreeMap<>();
    15         
    16         for(int i = 0; i < intervals.length; i++) {
    17             treemap.put(intervals[i].start, i);
    18         }
    19         
    20         for(int i = 0; i < intervals.length; i++) {
    21             Map.Entry<Integer, Integer> item = treemap.ceilingEntry(intervals[i].end);
    22             result[i] = (item == null) ? -1 : item.getValue();
    23         }
    24         
    25         return result;
    26     }
    27 }
  • 相关阅读:
    SOCKET 3次握手
    NativeXml帮助(四) http://gaoyanan.blog.sohu.com/162725319.html
    DELPHI下的SOCK编程(转)
    socket 编程入门教程(三)TCP原理:5、TCP的三次握手(threeway handshake)
    计算机术语的英文缩写
    提高查询速度方法总结
    复制表结构的通用存储过程
    QQ盗号工具代码(破解键盘锁)
    使用VB将SQL SERVER 的脚本导出
    2007第四周 关于逛街
  • 原文地址:https://www.cnblogs.com/liujinhong/p/6399135.html
Copyright © 2020-2023  润新知