Cpp_and_leecode
This is a page about »Cpp_and_leecode«.
leecode2589
你有一台电脑,它可以 同时 运行无数个任务。给你一个二维整数数组 tasks , 其中 tasks[i] = [starti, endi, durationi] 表示第 i 个任务需要在 闭区间 时间段 [starti, endi] 内运行 durationi 个整数时间点(但不需要连续)。
当电脑需要运行任务时,你可以打开电脑,如果空闲时,你可以将电脑关闭。
请你返回完成所有任务的情况下,电脑最少需要运行多少秒。
示例 1:
输入:tasks = [[2,3,1],[4,5,1],[1,5,2]]
输出:2
解释:
- 第一个任务在闭区间 [2, 2] 运行。
- 第二个任务在闭区间 [5, 5] 运行。
- 第三个任务在闭区间 [2, 2] 和 [5, 5] 运行。
电脑总共运行 2 个整数时间点。
示例 2:
输入:tasks = [[1,3,2],[2,5,3],[5,6,2]]
输出:4
解释:
- 第一个任务在闭区间 [2, 3] 运行
- 第二个任务在闭区间 [2, 3] 和 [5, 5] 运行。
- 第三个任务在闭区间 [5, 6] 运行。
电脑总共运行 4 个整数时间点。
c++11以后还有c++17、c++20、c++21等新特性
我想,应该写点什么吧
还是用到了,再写一写吧
int solution(vector<vector<int>>& tasks){
//用c++20中的 ranges::sort
ranges::sort(tasks, [](auto& a, auto& b){return a[1] < b[1];});
vector<int> run(task.back()[1] + 1);
int ans;
for(auto& task : tasks){
int start = task[0],end = task[1], d = task[2];
//用上c++20 的reduce
d -= reduce(run.begin() + start, run.start() + end + 1);
for(int i = d; i > 0; i--){
if(!run[i]){
d--;
run[i] = true;
ans ++;
}
}
}
return ans;
}