张不大的博客

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;
}

后续更新…

#c/c++