zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    HDU 2010 水仙花数
    HDU 2009 求数列的和
    HDU 2008 数值统计
    Nginx实现反向代理
    vue-router 实现分析
    区分slice,splice和split方法
    notify()和notifyAll()主要区别
    移动端页面兼容性问题解决方案整理
    clearfix的用法
    前端js面试题
  • 原文地址:https://www.cnblogs.com/liujinhong/p/6399135.html
Copyright © 2011-2022 走看看