Skip to content

Commit 98943ab

Browse files
committed
2020-04-12 436. Find Right Interval
1 parent 8a7819c commit 98943ab

1 file changed

Lines changed: 39 additions & 0 deletions

File tree

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# -*- coding: utf-8 -*-
2+
# @Author: 何睿
3+
# @Create Date: 2020-04-11 16:08:04
4+
# @Last Modified by: 何睿
5+
# @Last Modified time: 2020-04-11 16:34:06
6+
7+
8+
from typing import List
9+
10+
11+
class Solution:
12+
def findRightInterval(self, intervals: List[List[int]]) -> List[int]:
13+
starts = []
14+
index_dict = {}
15+
for index, interval in enumerate(intervals):
16+
starts.append(interval[0])
17+
index_dict[interval[0]] = index
18+
19+
starts.sort()
20+
21+
return list(self._binary_find(starts, interval[1], index_dict) for interval in intervals)
22+
23+
def _binary_find(self, nums, target, index_dict):
24+
25+
if target in index_dict:
26+
return index_dict[target]
27+
28+
left, right = 0, len(nums) - 1
29+
middle = left + (right - left) // 2
30+
while left <= right:
31+
if nums[middle] >= target and (middle == 0 or nums[middle - 1] < target):
32+
return index_dict[nums[middle]]
33+
elif nums[middle] < target:
34+
left = middle + 1
35+
elif nums[middle] >= target and (middle == 0 or nums[middle - 1] >= target):
36+
right = middle - 1
37+
middle = left + (right - left) // 2
38+
39+
return -1

0 commit comments

Comments
 (0)