GuilinDev

Lc0759

05 August 2008

759. Employee Free Time

我们得到了一份员工列表,它代表了每个员工的工作时间。

每个员工都有一个不重叠区间的列表,这些区间按顺序排列。

返回表示所有员工的公共、正长度空闲时间的有限区间列表,也按排序顺序。

(尽管我们以 [x, y] 的形式表示区间,但里面的对象是区间,而不是列表或数组。例如,schedule[0][0].start = 1, schedule[0][0]。 end = 2,并且没有定义 schedule[0][0][0])。此外,我们不会在答案中包含像 [5, 5] 这样的区间,因为它们的长度为零。

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
/*
// Definition for an Interval.
class Interval {
    public int start;
    public int end;

    public Interval() {}

    public Interval(int _start, int _end) {
        start = _start;
        end = _end;
    }
};
*/

class Solution {
    public List<Interval> employeeFreeTime(List<List<Interval>> schedule) {
        List<Interval> result = new ArrayList<>();
        List<Interval> timeLine = new ArrayList<>();
        schedule.forEach(e -> timeLine.addAll(e));
        timeLine.sort(((a, b) -> a.start - b.start));

        Interval interval = timeLine.get(0);
        for (Interval each : timeLine) {
            if (interval.end < each.start) {
                result.add(new Interval(interval.end, each.start));
                interval = each;
            } else {
                interval = interval.end < each.end ? each : interval;
            }
        }
        return result;
    }
}