Re: [閒聊] 每日leetcode
3439. Reschedule Meetings for Maximum Free Time I
思路:
把事件間的空閒時間照順序丟到array裡面
就算兩個事件間沒有空閒時間也要加到array裡
接著對array進行sliding windows
因為移動一個事件可以讓兩個空閒時間連在一起
以此類推移動k個事件可以讓k+1個空閒時間連在一起
就這樣做完sliding windows就可以得到答案了
C++ code :
class Solution {
public:
int maxFreeTime(int eventTime, int k, vector<int> &startTime, vector<int>
&endTime)
{
int n = startTime.size();
int start = 0, end = startTime[0], sum = 0, ans = 0;
vector<int> arr;
for (int i = 0; i < n; i++) {
end = startTime[i];
int diff = end - start;
arr.push_back(diff);
start = endTime[i];
}
int diff = eventTime - start;
arr.push_back(diff);
int m = arr.size();
for (int i = 0; i < min(m, k + 1); i++) {
sum += arr[i];
}
ans = sum;
for (int i = k + 1; i < m; i++) {
sum = sum - arr[i - k - 1] + arr[i];
ans = max(ans, sum);
}
return ans;
}
};
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 203.121.235.241 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1749647724.A.45F.html
討論串 (同標題文章)
完整討論串 (本文為第 1445 之 1548 篇):