Course Schedule III

    xiaoxiao2022-07-07  143

    原题链接 每一个pair(t,d)表示一个课程,t表示课程需要的时间,d表示该课程必须在时间d之前完成,要求返回最大可以完成的课程的数目。

    题目的标签为贪心,然后这道题又类似刘汝佳的竞赛书《算法竞赛入门》贪心算法部分关于区间问题的讨论,想到了要先对数组courses根据每个小区间的最后一个元素从小到大进行排序,接着遍历每一门课程,统计当前已经选择的课程所需要的总天数,在选完当前的课程时,判断是否有足够的天数,如果有则继续遍历;否则需要将multiset res中课程天数最多的课程与当前课程交换。

    class Solution { public: int scheduleCourse(vector<vector<int>>& courses) { sort(courses.begin(),courses.end(),[](vector<int>& a,vector<int>& b){ return a[1]<b[1]; }); multiset<int> res; int sum =0; for(auto &item:courses){ sum+=item[0]; res.insert(item[0]); if(sum>item[1]){ sum-=*res.rbegin(); res.erase(--res.end()); } } return res.size(); } };
    最新回复(0)