zoukankan      html  css  js  c++  java
  • 【leetcode】436. Find Right Interval

    题目如下:

     

    解题思路:题目要求的是对于任意一个区间i,要找出一个区间j,使得j的起点最接近i的终点。既然这样,我们可以把所有区间的终点组成一个列表,并按大小排序,使用二分查找就可以快速找到j区间。注意要保存新的列表和输入的区间列表的元素映射关系,这样才能快速找到j区间在输入区间列表的索引。

    代码如下:

    class Solution(object):
        def findRightInterval(self, intervals):
            """
            :type intervals: List[Interval]
            :rtype: List[int]
            """
            #print intervals[8].start,intervals[8].end
            #print intervals[15].start,intervals[15].end
            sl = intervals[:]
            def cmpf(i1,i2):
                if i1.start != i2.start:
                    return i1.start - i2.start
                return i1.end - i2.end
            sl.sort(cmp = cmpf)
    
            dic_inx = {}
            for i,v in enumerate(intervals):
                dic_inx[(v.start,v.end)] = i
    
            binL = []
            for i, v in enumerate(sl):
                binL.append(v.start)
            res = []
            for i in intervals:
                import bisect
                inx = bisect.bisect_left(binL,i.end)
                if inx <= 0 or inx > len(binL) - 1:
                    res.append(-1)
                else:
                    #res.append(inx)
                    res.append(dic_inx[(sl[inx].start, sl[inx].end)])
            return res
  • 相关阅读:
    【css】border-image
    函数的调用
    函数的返回值
    定义函数的三种形式
    文件处理实战之购物车系统
    文件处理小结
    文件修改的两种方式
    with管理文件操作上下文
    绝对路径和相对路径
    基本的文件操作
  • 原文地址:https://www.cnblogs.com/seyjs/p/9396014.html
Copyright © 2011-2022 走看看