一道很巧妙的题 假设第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