1229. Meeting Scheduler
interval
Given the availability time slots arrays slots1
and slots2
of two people and a meeting duration duration
, return the earliest time slot that works for both of them and is of duration duration
.
If there is no common time slot that satisfies the requirements, return an empty array.
The format of a time slot is an array of two elements [start, end]
representing an inclusive time range from start
to end
.
It is guaranteed that no two availability slots of the same person intersect with each other. That is, for any two time slots [start1, end1]
and [start2, end2]
of the same person, either start1 > end2
or start2 > end1
.
Example 1:
Input: slots1 = [[10,50],[60,120],[140,210]], slots2 = [[0,15],[60,70]], duration = 8
Output: [60,68]
Example 2:
Input: slots1 = [[10,50],[60,120],[140,210]], slots2 = [[0,15],[60,70]], duration = 12
Output: []
Constraints:
1 <= slots1.length, slots2.length <= 10
4
slots1[i].length, slots2[i].length == 2
slots1[i][0] < slots1[i][1]
slots2[i][0] < slots2[i][1]
0 <= slots1[i][j], slots2[i][j] <= 10
9
1 <= duration <= 10
6
分析
对两个slot数组排好序
双指针遍历,找有重叠的部分
[max(s1, s2), min(e1, e2)]
如果重叠长度够长(
end - start >= duration
),返回[start, start + duration]
小的时间段指针往后移
class Solution:
def minAvailableDuration(self, slots1: List[List[int]], slots2: List[List[int]], duration: int) -> List[int]:
n,m = len(slots1), len(slots2)
slots1.sort()
slots2.sort()
i = j = 0
while i < n and j < m:
s1, e1 = slots1[i]
s2, e2 = slots2[j]
start = max(s1, s2)
end = min(e1, e2)
if end - start >= duration:
return [start, start + duration]
if e2 > e1:
i += 1
elif e1 > e2:
j += 1
else:
i += 1
j += 1
return []
Last updated
Was this helpful?