630. Course Schedule III 【Hard】 贪心
来源:互联网 发布:男士皮肤保养 知乎 编辑:程序博客网 时间:2024/06/11 00:53
题目:给出若干课程,课程有2个信息,第一个是课程的持续天数,第二个是课程的截止日期。同一个课程必须是连续修的,在截止日期前上完课程算修完这门课程。求最多可以修的课程数。
思路:贪心的思路
先把课程按截止日期排序,然后从前到后遍历课程:
若该课程可以修(即已修的课程的天数总和,加上这门课的天数不超过此门课程的截止日期),则选择这门课
否则,把已修的课程里天数最多的与此门课比较,若前者更大则把前者的课程drop掉,take这门课程
难度一般,被排序时间卡了一会
void ch(int& a, int& b) {int temp;temp = a;a = b;b = temp;}void sort(vector<vector<int>>& courses, int s, int e) { if (e - s <= 0) return;int i = s, j = e;while (i < j) {while (courses[j][1] >= courses[i][1] && i < j) --j;if (i < j) {ch(courses[i][0], courses[j][0]);ch(courses[i][1], courses[j][1]);++i;}while (courses[j][1] >= courses[i][1] && i < j) ++i;if (i < j) {ch(courses[i][0], courses[j][0]);ch(courses[i][1], courses[j][1]);--j;}}sort(courses, s, i - 1);sort(courses, i + 1, e);}struct cmp {bool operator() (int& a, int& b) {return a < b;}};class Solution {public: int scheduleCourse(vector<vector<int>>& courses) { sort(courses, 0, courses.size() - 1); int total_days = 0, count = 0; priority_queue<int, std::vector<int>, cmp> days_taken; for (int cur = 0; cur < courses.size(); ++cur) { if (total_days <= courses[cur][1] - courses[cur][0]) { days_taken.push(courses[cur][0]); total_days += courses[cur][0]; //take_course(days_taken, courses[cur][0], total_days); count++; } else { if (!days_taken.empty() && days_taken.top() > courses[cur][0]) { total_days -= days_taken.top() - courses[cur][0]; days_taken.pop(); days_taken.push(courses[cur][0]); } //replace_max(days_taken, courses[cur][0], total_days); } } return count; }};
阅读全文
0 0
- 630. Course Schedule III 【Hard】 贪心
- 630. Course Schedule III
- 630. Course Schedule III
- leetcode 630. Course Schedule III 课程调度 + 贪心算法
- leetcode 630. Course Schedule III
- [LeetCode]630. Course Schedule III
- Course Schedule III
- Course Schedule III 解法
- 课程调度问题:LeetCode 630. Course Schedule III
- 【Course Schedule】Course Schedule
- Course Schedule
- Course Schedule
- Course Schedule
- Course Schedule
- Course Schedule
- Course Schedule
- Course Schedule
- Course Schedule
- zookeeper与grpc集成实现服务注册与发现
- SCOI2005 骑士精神(Knight) 启发式搜索 迭代加深
- 虚拟机快速搭建CentOS,并解决网络问题
- 剑指offer——面试题60:把树打印成多行
- unity 文件的创建及读取
- 630. Course Schedule III 【Hard】 贪心
- 全选反选
- android monkey 测试策略
- 选择排序,二分查找,Arrays类操作数组的各种方法
- shell学习
- LINUX下常用SHELL指令
- there is nothing....
- dijkstra堆优化 详解(洛谷模板题)
- 6.3.2 层次遍历二叉树【算法入门经典】【结构体指针】