630. 课程表 III

news2025/1/10 20:48:54

文章目录

  • Tag
  • 题目来源
  • 题目解读
  • 解题思路
    • 方法一:贪心+优先队列
  • 写在最后

Tag

【贪心】【优先队列】【数组】


题目来源

630. 课程表 III


题目解读

n 门编号从 1n 的课程,有一个数组 courses,其中 courses[i] = [duration, lastDay] 表示第 i 门课将会持续上 duaration 天,并且必须在 lastDay 之前完成(包括这一天)。你的学期从第一天开始,且不能同时上两门及以上的课程,返回你最多可以修完多少门课程。


解题思路

方法一:贪心+优先队列

为了尽可能多的学习课程,我们优先学习 lastDay 靠前的课程。如果当前课程的结束时间和 lastDay 有冲突了,并且前面学习过的课程中持续时间最长的课程持续时间大于当前课程,就用当前课程替换掉学习过的课程中持续时间最长的课程。

具体地,首先需要对 courses 课程进行按照 lastDay 字段进行升序排序;接着维护一个优先队列 q 用来存放可以学习的课程,如果遇到冲突,直接 q.top() 取出的就是学习过的课程中持续时间最长的课程,如果学习过的课程中持续时间最长的课程的持续时间大于当前课程的持续时间,则用当前课程的持续时间替换之。最后返回 q 的长度即为可以学习的课程数量的最大值。

实现代码

class Solution {
public:
    int scheduleCourse(vector<vector<int>>& courses) {
        sort(courses.begin(), courses.end(), [](const auto& c1, const auto& c2) {
            return c1[1] < c2[1];  
        });

        priority_queue<int> q;
        int total = 0;      // 学习过课程的总时间节点
        for (const auto& course : courses) {
            int t = course[0], d = course[1];
            if (total + t <= d) {
                total += t;
                q.push(t);
            }
            else if (!q.empty() && q.top() > t) {
                total -= q.top();
                total += t;
                q.pop();
                q.push(t);
            }
        }
        return q.size();
    }
};

复杂度分析

时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn),排序需要的时间为 O ( n l o g n ) O(nlogn) O(nlogn)。优先队列单次需要 O ( l o g n ) O(logn) O(logn) 的时间,每个课程最多被取出或放入队列一次,因此时间复杂度为 O ( n l o g n ) O(nlogn) O(nlogn)。总的时间复杂度为 O ( n l o g n ) O(nlogn) O(nlogn)

空间复杂度: O ( n ) O(n) O(n),是优先队列需要使用的空间。


写在最后

如果文章内容有任何错误或者您对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。

如果大家有更优的时间、空间复杂度方法,欢迎评论区交流。

最后,感谢您的阅读,如果感到有所收获的话可以给博主点一个 👍 哦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1002806.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

喜报 | 祝贺璞华科技通过CMMI Lv5 等级复审!

喜报频传 璞华科技顺利通过复审认证 再次荣获CMMI5级证书 让我们共同庆祝这一荣耀的时刻 展望更加美好的未来 2023年8月&#xff0c;经Safety Equipment Institute评估&#xff0c;璞华科技顺利通过全球软件领域CMMI五级&#xff08;简称CMMI5&#xff09;复审认证&#xf…

【Vue】vue2使用pdfjs预览pdf文件,在线预览方式一,pdfjs文件包打开新窗口预览pdf文件

系列文章目录 【Vue】vue2预览显示quill富文本内容&#xff0c;vue-quill-editor回显页面&#xff0c;v-html回显富文本内容 【Vue】vue2项目使用swiper轮播图2023年8月21日实战保姆级教程 【Vue】vue2使用pdfjs预览pdf文件&#xff0c;在线预览方式一&#xff0c;pdfjs文件包…

ES中type和keyword两个数据类型的区别

前言 这是我在这个网站整理的笔记&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神的孩子都在歌唱 参考文章&#xff1a; https://segmentfault.com/q/1010000017312707 ES数据类型&#xff1a;type与keyword&#xff1a;https://blog.csdn.net/ywb201…

COMPUTATIONAL BIOLOGYAND BIOIINFORMATICS投稿经验分享

IEEE/ACM Transactions on Computational Biology and Bioinformatics 关于latex,用模板选择:IEEE模板选择器,进行选择就行。 注意页数!超了加钱! 1)注册登录,进入之后开始投稿。(这里也可以看到页数限制信息)按顺序添加标题和摘要。 2) 先上上传pdf文件,然后上传其…

荧光灯和led灯哪个对眼睛好?分享专业的护眼台灯

发现有很多家庭都忽略了孩子学习时光线的的重要性&#xff0c;经常是开着家里的顶灯给孩子写作业&#xff0c;但其实如果光线不适合或者不够充足&#xff0c;对孩子眼睛的危害是很大的。也有些家长会选择给孩子挑选台灯&#xff0c;不过并不知道哪种好&#xff0c;例如最近我看…

芯科蓝牙BG27开发笔记4-SSV5 IDE的使用

1. 如何转移工作区的项目文件到新的文件夹&#xff0c;并且可以继续使用ssv5编辑、编译&#xff1f; 从默认的工作区将目标工程整体拷贝出来 目标文件夹&#xff1a; 进入ssv5点击导入工程&#xff0c;并选择目标文件夹 继续下一步&#xff0c;修改项目文件夹所在位置为其源码…

北京青年与中青年人群消费模型调研

本项目旨在研究北京青年&#xff08;27岁及以下&#xff09;人群与中青年人群&#xff08;28岁以上&#xff09;的消费模型的不同以及其背后可能的原因。在此之前&#xff0c;我们通过国家统计局北京的官方数据&#xff08;如下图&#xff09;&#xff0c;确定了普通人大致在哪…

SpringBoot自动装配源码解析

Spirngboot为啥会比Spring使用更简单&#xff0c;少了那么多的Xml文件&#xff1f;一切都是基于SpringBoot的自动装配&#xff0c;当然SpringBoot的自动装配也是一个高频的面试题。 1.SpringApplication注解的源码分析 在分析源码时&#xff0c;都要问一问为什么SpringBoot能…

时间序列论文-聚类和异常检测(一)

这篇文章摘自&#xff0c;知乎&#xff1a;https://www.zhihu.com/question/29507442/answer/1212624591?utm_id0 写的很好&#xff0c;就记录一下。 两篇关于时间序列的论文 原文链接&#xff1a;两篇关于时间序列的论文 这次整理的就是清华大学裴丹教授所著的两篇与时间序…

Qt/C++音视频开发52-采集本地屏幕桌面的终极设计

一、前言 最开始设计的时候&#xff0c;只考虑了一个屏幕的情况&#xff0c;这种当然是最理想的情况&#xff0c;实际上双屏或者多屏的用户也不在少数&#xff0c;比如我这两个屏幕&#xff0c;屏幕1是1080P&#xff0c;屏幕2是2K分辨率&#xff0c;打印两个屏幕的区域是 QRec…

【EI会议征稿】2023年智能科学与计算机工程国际学术会议(ISCE 2023)

2023年智能科学与计算机工程国际学术会议&#xff08;ISCE 2023&#xff09; 2023 International Conference on Intelligence Scicence andComputer Engineering 2023年11月3-5日 中国-西双版纳 迄今为止&#xff0c;人工智能研究在一些特殊领域取得了一定的实质性进展。然…

单相并联下垂控原理

Part1 上述有个核心的piont是等效阻抗上的电压一般时很小的&#xff0c;这就导致逆变器输出电压矢量E和负载电压矢量UL之间的夹角很小 》基于上述的结论有助于我们去简化下垂控制的公式&#xff01;&#xff01;&#xff01; Part2 上述得到负载电流&#xff0c;接着乘以负载…

计算机算法分析与设计(1)---求算法时间复杂性(手写例题)

文章目录 一、主定理求解二、递归树求解三、递归树求解含O的递归方程 一、主定理求解 二、递归树求解 三、递归树求解含O的递归方程

后端|一个分布式锁「失效」的案例分析

小猿最近很苦恼&#xff1a;明明加了分布式锁&#xff0c;为什么并发还是会出问题呢&#xff1f; 故事从接到需求开始说起。 接到需求 小猿前一阵接到一个小任务&#xff0c;里面有一个功能对应的场景如下&#xff1a; 封装一个对账户余额进行加减操作的方法&#xff1b;所属服…

shell指令,通过函数实现数组求和,通过函数获取用户uid和gid

一、实现一个对数组求和的函数&#xff0c;数组通过实参传递给函数 num0 read -p "请输入一组数据&#xff1a;" -a arr function add() {for ((i0; i<${#arr[*]}; i))do ((numarr[i]))donereturn $num } add ${arr[*]} echo $? 二、写一个函数&#xff0c;输出…

基于STM32智能环境系统

摘要 本系统采用stm32f407作为主控芯片&#xff0c;实现对环境的监测。并且通过和手机通信&#xff0c;获取当前的天气预报信息&#xff0c;结合当前测得的温湿度&#xff0c;可以为用户提供出行建议。利用stm32自带的RTC可以实现时间及闹钟功能。此外RTC还可以用于电子日历的…

《信息系统项目管理师教程(第4版)》第19章 配置与变更管理 知识点整理 xmind思维导图

已上传xmind思维导图&#xff0c;需要可下载 一、配置管理 基于配置库的变更控制(经常考) 二、变更管理

华为OD七日集训第4期 - 按算法分类,由易到难,循序渐进,玩转OD

目录 一、适合人群二、本期训练时间三、如何参加四、7日集训第4期五、精心挑选21道高频100分经典题目&#xff0c;作为入门。第1天、数据结构第2天、滑动窗口第3天、贪心算法第4天、二分查找第5天、分治递归第6天、深度优先搜索dfs算法第7天、宽度优选算法&#xff0c;回溯法 六…

Mybatis-Plus 使用教程

01-Mybatis-Plus介绍 1.1 什么是mybatis-plus 官网: 简介 | MyBatis-Plus MyBatis-Plus&#xff08;简称 MP&#xff09;是一个 MyBatis 的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 1.2 官方愿景 1.3 特性 无侵入&…

伪谱法地震波场数值模拟

本文实现内容 各向同性介质波动方程伪谱法波场求解。各项异性介质(VTI、HTI)介质伪谱法波场求解。实现了衰减边界条件、拓展周期边界法。一种波场模拟的数据存储格式.sfd&#xff0c;提供二进制或文本输入输出。对波场模拟得到的存储数据进行.gif绘制、.png绘制、地震剖面绘制…