python leetcode 436. Find Right Interval

一道很巧妙的题 假设第i个有右区间 那么intervals[i].end<intervals[i+1].start
因为start唯一 所以我们建立一个列表里面存的是(intervals[i].start,i) 再利用二分查找寻找end位于列表中的哪个位置
扩展:假设end唯一 寻找左区间

class Solution:
    def findRightInterval(self, intervals):
        """
        :type intervals: List[Interval]
        :rtype: List[int]
        """
        invs = sorted((x.start, i) for i, x in enumerate(intervals))
        ans = []
        for x in intervals:
            idx = bisect.bisect_right( invs, (x.end,) )
            ans.append(invs[idx][1] if idx < len(intervals) else -1)
        return ans

猜你喜欢

转载自blog.csdn.net/Neekity/article/details/84677878
今日推荐