题目浅析

  • 想查看原题可以点击题目链接

  • 简单地说,就是给一系列会议的起始时间和结束时间(不重合),可以对其中最多 k 个会议进行时间调整,但不能改变会议的相对顺序,求调整后最大会议间休息时间。

思路分享

代码解答(强烈建议自行解答后再看)

  • 参考解法
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
class Solution {
public:
int maxFreeTime(int eventTime, int k, vector<int>& startTime, vector<int>& endTime) {
int n = startTime.size();
auto get = [&](int i) -> int { // lambda,[&]的意思是父域的所有变量以引用形式导入
if (i == 0) {
return startTime[0];
}
if (i == n) {
return eventTime - endTime[n - 1];
}
return startTime[i] - endTime[i - 1];
};

int s = 0, ans = 0;
for (int i = 0; i <= n; i++) {
s += get(i);
if (i < k) {
continue;
}
ans = max(ans, s);
s -= get(i - k);
}
return ans;
}
};