zoukankan      html  css  js  c++  java
  • 436. 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.
    
    # Definition for an interval.
    # class Interval(object):
    #     def __init__(self, s=0, e=0):
    #         self.start = s
    #         self.end = e
    
    
    class Solution(object):
        def findRightInterval(self, intervals):
            """
            :type intervals: List[Interval]
            :rtype: List[int]
    Input: [ [3,4], [2,3], [1,2] ]
    Output: [-1, 0, 1]
    [1, 2], [2, 3], [3, 4]
    2,      1,    0
    1,      0,  -1
    
    Input: [ [1,4], [2,3], [3,4] ]
    Output: [-1, 2, -1]
    [1, 4], [2, 3], [3, 4], [4, 5] sorted
            """
            from bisect import bisect_left
            starts = []
            pos_dict = {}
            for i,v in enumerate(intervals):
                pos_dict[v.start] = i
                starts.append(v.start)
            starts.sort()
            ans = [-1]*len(intervals)
            for i,v in enumerate(intervals):
                pos = bisect_left(starts, v.end)
                if pos>=0 and pos<len(intervals):
                    ans[i] = pos_dict[starts[pos]]
            return ans                
  • 相关阅读:
    攻击
    url特殊字符转义及解决方法
    为解决Samba windows 无法访问 尝试过的方法
    两种JavaScript的AES加密方式(可与Java相互加解密)
    css 实现关闭按钮 X
    webpack 安装
    webpack 踩的坑
    npm start时报错 npm ERR!Windows_NT 6.1.7601
    点击文字,把input type="radio"也选中
    linux-正则表达式
  • 原文地址:https://www.cnblogs.com/bonelee/p/6194986.html
Copyright © 2011-2022 走看看