# [LeetCode] 759. Employee Free Time

We are given a list schedule of employees, which represents the working time for each employee.

Each employee has a list of non-overlapping Intervals, and these intervals are in sorted order.

Return the list of finite intervals representing common, positive-length free time for all employees, also in sorted order.

(Even though we are representing Intervals in the form [x, y], the objects inside are Intervals, not lists or arrays. For example, schedule.start = 1, schedule.end = 2, and schedule is not defined). Also, we wouldn't include intervals like [5, 5] in our answer, as they have zero length.

Example 1:

``````Input: schedule = [[[1,2],[5,6]],[[1,3]],[[4,10]]]
Output: [[3,4]]
Explanation: There are a total of three employees, and all common
free time intervals would be [-inf, 1], [3, 4], [10, inf].
We discard any intervals that contain inf as they aren't finite.
``````

Example 2:

``````Input: schedule = [[[1,3],[6,7]],[[2,4]],[[2,5],[9,12]]]
Output: [[5,6],[7,9]]
Constraints:
``````

Info:

``````1 <= schedule.length , schedule[i].length <= 50
0 <= schedule[i].start < schedule[i].end <= 10^8
``````

``````function check (src) {
var arr = []
src.forEach(it => arr = arr.concat(JSON.parse(JSON.stringify(it))))
for (let i = arr.length - 1; i >= 0; i--) {
let cover = false
let cur = arr[i]
for (let j = 0; j < i; j++) {
let tt = arr[j]
if ((cur >= tt && cur <= tt) ||
(cur >= tt && cur <= tt) ||
(tt >= cur && tt <= cur) ||
(tt >= cur && tt <= cur) ) {
cover = true
tt = Math.min(cur, tt)
tt = Math.max(cur, tt)
break
}
}
if (cover) arr.splice(i, 1)
}
if (arr.length < 2) return []
var result = []
arr.sort((aa,bb) => aa < bb ? -1 : 1)
var start = arr
for (let i = 1, len = arr.length; i < len; i++) {
let cur = arr[i]
result.push([start, cur])
start = cur
}
return result
}
check([[[1,3],[6,7]],[[2,4]],[[2,5],[9,12]]])
// >> [[5,6],[7,9]]
``````

>> 留言评论