给你一个区间数组 intervals ,其中 intervals[i] = [starti, endi] ,且每个 starti 都 不同 。
区间 i 的 右侧区间 可以记作区间 j ,并满足 startj >= endi ,且 startj 最小化 。
返回一个由每个区间 i 的 右侧区间 的最小起始位置组成的数组。
如果某个区间 i 不存在对应的 右侧区间 ,则下标 i 处的值设为 -1 。
解题思路:
简单来说就是把所有区间的左侧端点值加入一个list,并且能够保存其顺序位次信息
遍历所有的右侧端点值,二分查找是否存在一个值在start序列大于等于其值
有——加入位置信息 || 没有——-1
class Solution(object):
def findRightInterval(self, intervals):
def binarySearch(nums, target):
left, right = 0, len(nums)-1
while left <= right:
mid = left + (right-left)//2
if target == nums[mid]:
return target
elif target > nums[mid]:
left = mid + 1
elif target < nums[mid]:
right = mid - 1
else:
pass
if left >= len(nums):
return -1314
return nums[left]
res = []
starts, ends = [], []
for i in intervals:
starts.append(i[0])
ends.append(i[1])
# print(starts)
dic = {}
for i in range(len(starts)):
dic[starts[i]] = i
starts.sort()
for i in range(len(ends)):
flag = binarySearch(starts, ends[i])
if flag == -1314:
res.append(-1)
else:
res.append(dic[flag])
return res