1. 程式人生 > >python leetcode 436. Find Right Interval

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