当前位置:   article > 正文

贪心算法题目总结_贪心算法考题

贪心算法考题

1:课程选择问题

630. 课程表 III - 力扣(LeetCode) (leetcode-cn.com)icon-default.png?t=LA92https://leetcode-cn.com/problems/course-schedule-iii/

  1. class Solution {
  2. public:
  3. bool compare(int a,int b){
  4. return a<b;
  5. }
  6. int scheduleCourse(vector<vector<int>>& courses) {
  7. sort(courses.begin(), courses.end(), [](const auto &x, const auto &y){return x[1] < y[1];});//将数组按照结束时间的升序结果排列
  8. priority_queue<int>p;//建立大根堆存储持续时间
  9. int now=0;//表示当前方案的结课时间
  10. for(int i=0;i<courses.size();i++){
  11. int t=courses[i][0];
  12. int d=courses[i][1];
  13. if(now+t<=d){
  14. now=now+t;
  15. p.push(t);
  16. }
  17. else if(!p.empty()){
  18. int tmax=p.top();
  19. if(tmax>t){
  20. p.pop();
  21. p.push(t);
  22. now=now-tmax+t;
  23. }
  24. }
  25. }
  26. return p.size();
  27. }
  28. };

首先对于两个课程结束时间有早有晚的情况。

首先证明选择要先选择结束时间早的学习后学结束时间晚的是最佳方案。

(因为经过证明先学结束时间晚的成立的话,那么先学结束时间早的方案也一定成立;但是先学结束时间早的方案成立的情况下,先学结束时间晚的方案不一定成立)

所以首先要对原数组按照结束时间从小到大排列

后续算法如下:(关于方案的具体证明过程见题解)

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/934284
推荐阅读
相关标签
  

闽ICP备14008679号