# 1229. Meeting Scheduler

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`.

&#x20;

**Example 1:**

<pre><code><strong>Input: slots1 = [[10,50],[60,120],[140,210]], slots2 = [[0,15],[60,70]], duration = 8
</strong><strong>Output: [60,68]
</strong></code></pre>

**Example 2:**

<pre><code><strong>Input: slots1 = [[10,50],[60,120],[140,210]], slots2 = [[0,15],[60,70]], duration = 12
</strong><strong>Output: []
</strong></code></pre>

&#x20;

**Constraints:**

* `1 <= slots1.length, slots2.length <= 10`<sup>`4`</sup>
* `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`<sup>`9`</sup>
* `1 <= duration <= 10`<sup>`6`</sup>

分析

* 对两个slot数组排好序
* **双指针遍历，找有重叠的部分 `[max(s1, s2), min(e1, e2)]`**
* 如果重叠长度够长（`end - start >= duration`），返回 `[start, start + duration]`
* **小的时间段指针往后移**

```python3
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 []
            

```
