630. Course Schedule III

在这里插入图片描述

https://leetcode.com/problems/course-schedule-iii/discuss/104845/Short-Java-code-using-PriorityQueue
1.按照截止日期排序
2.迭代,每次加上这次的时间,并且把时间加入优先队列。如果超过它的过期时间,就把队列中最大的时间去掉。

class Solution {
public:
    int scheduleCourse(vector<vector<int>>& courses) {
        sort(courses.begin(), courses.end(), sortHelper);
        priority_queue<int> pq;
        int time = 0;
        for (auto& vec : courses) {
            time += vec[0];
            pq.push(vec[0]);
            if (time > vec[1]) {
                time -= pq.top();
                pq.pop();
            }
        }
        return pq.size();
    }
private:
    static bool sortHelper(vector<int>& v1, vector<int>& v2) {
        return v1[1] < v2[1];
    }
};

疑问:
1.为什么去掉最长的可以?
如果去掉的是当前这个,那么时间总量恢复到前一个,是可以的;
如果去掉的是以前的当中最长的,那么时间就把前一次迭代的时间还要少,更加可以。
2.如果我们去掉了一个,是不是意味着之前去掉的某个可以回来?
不可以。因为之前去掉的会比当前这个更大,更不可能回来。

posted @ 2019-09-21 15:34  于老师的父亲王老爷子  阅读(20)  评论(0)    收藏  举报