# 1229 安排会议日程

# 题目链接

# 难度:中等

# 思路分析:

滑窗思想,一端一端固定

#

#

#

#

#

#

#

#

#

#

#

#

#

#

# 代码:

/**
 * @param {number[][]} slots1
 * @param {number[][]} slots2
 * @param {number} duration
 * @return {number[]}
 */
// 滑窗 划出范围
var minAvailableDuration = function(slots1, slots2, duration) {
  let start = 0,
    end = 0,
    find = false;
  // 排序找到最早的时间
  const fn = (a, b) => {
    return a[0] - b[0];
  };
  slots1.sort(fn);
  slots2.sort(fn);
  for (let i = 0; i < slots1.length; i++) {
    const item1 = slots1[i];
    for (let j = 0; j < slots2.length; j++) {
      const item2 = slots2[j];
      if (item1[1] < item2[0]) {
        continue;
      }
      if (item2[1] < item1[0]) {
        continue;
      }
      // 滑窗思想 先固定一边 再固定另一边
      start = Math.max(item1[0], item2[0]); // 找到最小值中最大的
      end = Math.min(item1[1], item2[1]); // 找到最大值最小的
      // 测试区间范围
      if (end - start >= duration) {
        find = true;
        break;
      }
    }
    if (find) {
      break;
    }
  }
  if (find) {
    end = start + duration; // 最早会议时间
    return [start, end];
  }
  return [];
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

# 鼓励我一下:

觉得还不错的话,给我的项目点个star

# 点个Star支持我一下~

最后更新时间: 7/2/2020, 4:27:35 PM