【力扣·每日一题】630. 课程表 III (C++ 贪心 优先队列)

简介: 【力扣·每日一题】630. 课程表 III (C++ 贪心 优先队列)

linkkk

题意

20200401134307494.png

思路

经典贪心(不是

首先,结束时间晚的可以后选,因为他的可选性比较高。所以首先按照结束时间从小到大排序。

然后遍历一遍序列,记录当前的时间。对于当前遍历到的课程,分类讨论:


如果当前的时间加上当前课程所需要的时间< =该课程的最晚结束时间,说明可以选该课程。

如果此时无法选择该课程,可以将以前所选的需要时间最大的课程取消,用该课程替代。这样当前花费的时间会更少,而且课程数量还不变,更有利于最优解,这只是感性理解,具体证明见官方题解~

要动态的维护课程需要时间的最大值,用优先队列就可以了。

代码

class Solution {
public:
    static bool cmp(vector<int> &a,vector<int> &b){
        if(a[1]==b[1]){
            return a[0]<b[0];
        }
        return a[1]<b[1];
    }
    int scheduleCourse(vector<vector<int>>& courses) {
        sort(courses.begin(),courses.end(),cmp);
        priority_queue<int>q;
        int ans=0,now=0;
        for(vector<int>t:courses){
            if(now+t[0]<=t[1]){
                now+=t[0];
                q.push(t[0]);
            }
            else{
                if(!q.empty()){
                    if(q.top()>t[0]){
                        now=now-q.top()+t[0];
                        q.pop();
                        q.push(t[0]);
                    }
                }
            }
        }
        return q.size();
    }
};
/*
[[1,2],[2,3]]
*/
目录
相关文章
|
5月前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-2
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
5月前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-1
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
6月前
|
算法 C语言 容器
从C语言到C++_25(树的十道OJ题)力扣:606+102+107+236+426+105+106+144+94+145(下)
从C语言到C++_25(树的十道OJ题)力扣:606+102+107+236+426+105+106+144+94+145
66 7
|
6月前
|
存储 算法 C语言
从C语言到C++_39(C++笔试面试题)next_permutation刷力扣
从C语言到C++_39(C++笔试面试题)next_permutation刷力扣
61 5
|
6月前
|
存储 C语言 容器
从C语言到C++_26(set+map+multiset+multimap)力扣692+349+牛客_单词识别(下)
从C语言到C++_26(set+map+multiset+multimap)力扣692+349+牛客_单词识别
46 1
|
6月前
|
存储 C语言 容器
从C语言到C++_26(set+map+multiset+multimap)力扣692+349+牛客_单词识别(中)
从C语言到C++_26(set+map+multiset+multimap)力扣692+349+牛客_单词识别
48 1
|
6月前
|
存储 自然语言处理 C语言
从C语言到C++_26(set+map+multiset+multimap)力扣692+349+牛客_单词识别(上)
从C语言到C++_26(set+map+multiset+multimap)力扣692+349+牛客_单词识别
62 1
|
6月前
|
C语言
从C语言到C++_25(树的十道OJ题)力扣:606+102+107+236+426+105+106+144+94+145(中)
从C语言到C++_25(树的十道OJ题)力扣:606+102+107+236+426+105+106+144+94+145
57 1
|
5月前
|
存储 设计模式 算法
【C++航海王:追寻罗杰的编程之路】priority_queue(优先队列) | 容器适配器你知道哪些?
【C++航海王:追寻罗杰的编程之路】priority_queue(优先队列) | 容器适配器你知道哪些?
52 0
|
6天前
|
存储 编译器 C++
【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
本文介绍了C++中类和对象的高级特性,包括取地址运算符重载、构造函数的初始化列表、类型转换、static修饰成员、友元、内部类及匿名对象等内容。文章详细解释了每个概念的使用方法和注意事项,帮助读者深入了解C++面向对象编程的核心机制。
28 5