【力扣每日一题】2023.9.11 课程表Ⅲ

news2024/10/6 6:03:24

目录

题目:

示例:

分析:

代码:


题目:

示例:

分析:

今天是和前两天一样课程表,不过今天不太一样了,今天不是图论了,可以看作是全新的题目。

给我们一个课程数组,里面的元素是每个课程的学习所需花费时间和结课时间,我们需要在结课时间到达之前学习完课程。问我们最终可以学完多少门课程。

我们需要尽可能多得学习课程,那么必然是需要贪心的,问题在于我们需要怎么贪。我们应该先学习花费时间短的课程以及优先学习快结课的课程。

也就是在优先学习快结课的课程的基础上选择花费时间短的课程,结课时间的优先级较高,因此我们对课程数组按照结课时间来进行排序。

做完预处理之后,我们定义一个变量,表示目前所在的时间,初始化为0,表示我们在开学的第一天,每次学习完某门课程之后,我们就把这个时间加上学习花费的时间。

接着我们开始模拟学习课程,按照顺序遍历排完序的课程数组,如果当前的课程的花费时间加上我们所在的时间仍未超过当前课程的结课时间,那么我们学习这门课程,更新一下所在的时间点。

如果当前课程花费的时间加上我们所在的时间之后超过了结课时间,那么我们无法学习这门课程,不过我们可以贪心一下,如果这门课程花费的时间比我们学过的课程中花费最多的时间更少,那么我们可以选择不学那门花费更多的课程转为学习本门课程,因为我们是按照结课时间来排序,并且是按顺序遍历的,所以替换是不会发生冲突的。

为了更方便地获取我们学习过的课程的最大花费,我们可以拿一个大顶堆来存放已经学习过的课程的花费时间,每次学习了课程,我们就把花费时间放进去,每次替换了学习的课程,我们就将大顶堆的堆顶元素推出,再把新课程塞进去。

替换之后我们还需要更新一下时间点,因为学习课程花费的时间总量少了,因此我们需要补个“差价“,把时间点再减去替换课程的花费时间之差。

最后遍历完毕,我们返回大顶堆的大小即可。

代码:

class Solution {
public:
    int scheduleCourse(vector<vector<int>>& courses) {
        //按照截止日期来排序,优先学习临期课程
        sort(courses.begin(),courses.end(),[](auto &a,auto &b){return a[1]<b[1];});
        //大顶堆存放已经学习课程所花费的时间
        priority_queue<int> pq;     
        int start=0; 
        for (auto& c:courses) {
            //学习课程之后不超过规定的时间,那么可以学习,大顶堆中加入
            if(start+c[0]<=c[1]){ 
                pq.push(c[0]);
                start+=c[0];
            }
            //如果学习课程的时间小于已经学习的课程中时间最大的课程,那么可以替代掉
            else if(!pq.empty()&&pq.top()>c[0]){
                start-=pq.top()-c[0];   //时间上补个差价
                pq.pop();               //把大顶堆中的最大元素换出来
                pq.push(c[0]);          
            }
        }
        return pq.size();
    }
};

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

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

相关文章

Java——选择语句

if语句 语法格式&#xff1a; if(表达式){若干语句 } 例&#xff1a; ​import java.util.Scanner; public class Test1 {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();if(n%20){System.out.println("even");}…

Linux命令200例:write用于向特定用户或特定终端发送信息

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0…

v2.0舆情分析系统整体功能介绍

登录界面&#xff1a; 1、输入用户名、密码后可正常登录&#xff1b; 2、注册功能点击后进入注册界面正常注册用户信息&#xff1b; 3、忘记密码功能&#xff1a;点击后进入忘记密码页面demo 登录后&#xff0c;进入主页面&#xff0c;主页面目前包含关键词输入功能&#xf…

如何注册哥伦比亚商标?

在当今全球市场竞争激烈的环境下&#xff0c;商标已成为企业的重要资产之一。哥伦比亚作为一个拥有丰富历史文化的国家&#xff0c;对知识产权保护的重视程度也在逐渐提高。通过在哥伦比亚注册商标&#xff0c;企业可以更好地拓展南美市场&#xff0c;并进一步提升品牌价值和知…

Selenium自动化测试 —— 通过cookie绕过验证码的操作

验证码的处理 对于web应用&#xff0c;很多地方比如登录、发帖都需要输入验证码&#xff0c;类型也多种多样&#xff1b;登录/核心操作过程中&#xff0c;系统会产生随机的验证码图片&#xff0c;进行验证才能进行后续操作 解决验证码的方法如下&#xff1a; 1、开发做个万能…

T2I-Adapter:增强文本到图像生成的控制能力

链接&#xff1a;GitHub - TencentARC/T2I-Adapter: T2I-Adapter 文本到图像生成 (T2I) 是人工智能领域的一个重要研究方向。近年来&#xff0c;随着深度学习技术的发展&#xff0c;T2I 技术取得了显著进展&#xff0c;生成的图像在视觉效果上已经与真实图像难以区分。 然而&…

C++ -day3

1、自行封装一个栈的类 头文件 #ifndef ZY1_H #define ZY1_H#include <iostream>using namespace std;class Stack { private:int *p nullptr; //存储栈的数组int top; //栈顶元素的下标int max;public://定义析构函数~Stack();//定义拷贝构造函数…

零基础教程:使用yolov8训练无人机VisDrone数据集

1.准备数据集 1.先给出VisDrone2019数据集的下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1e2Q0NgNT-H-Acb2H0Cx8sg 提取码&#xff1a;31dl 2.将数据集VisDrone放在datasets目录下面 2.数据集转换程序 1.在根目录下面新建一个.py文件&#xff0c;取名叫…

全开源影视APP源码带后台 苍穹影视APP源码 免受权带安装教程

苍穹影视 V20 全新后台七彩视界免受权开源源码此版本为天穹公益版开源无解密安装教程 全新后台很是都雅,源码全开源无加密。 PC 端对接教程&#xff1a; 建议在浮图下操作 正常安装前后端 然后安装米酷 cms 根据教程安装即可 米酷 cms 对接部门已被我改动&#xff0c;只要在安装…

【C++进阶】二叉树进阶之二叉搜索树

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…

测试面试回顾(1)

硬件测试面试回顾&#xff08;1&#xff09; pn结MOS和CMOS消耗功耗——MOS器件开关时半导体工艺半导体器件SPSS常用的10种统计分析如何用SPSS进行数据分析&#xff1f;Jmeter介绍及测试用例编写JmeterSelenium测试用例测试用例设计方法通用测试用例八要素自动化运维全局变量与…

matlab自带VMD详解,VMD去噪,VMD分解

为了更好的利用MATLAB自带的vmd函数&#xff0c;本期作者将详细讲解一下MATLAB自带的vmd函数如何使用&#xff0c;以及如何画漂亮的模态分解图。 首先给出官方vmd函数的调用格式。 [imf,residual,info] vmd(x) 函数的输入&#xff1a; 这里的x是待分解的信号&#xff0c;一行或…

Kubernetes Up and Running

从整体概念思想到具体组件对象的思想设计说明和实践探索&#xff0c;对分布式系统软件建设的认识更上一层楼。 英文版本下载 链接&#xff1a;https://pan.baidu.com/s/1ZjMqEMc3GGJxDc0ekz4ihA?pwdhjko 提取码&#xff1a;hjko 摘要 《Kubernetes Up and Running》是一本非…

前后端分离,JSON数据如何交互

如何接收&#xff1a; 在配置文件商法加上相应注解 EnableWebMvc 在接收的路径上加上RequestBody注解 注解的作用&#xff1a;在Spring框架中&#xff0c;RequestBody注解用于将HTTP请求的body中的内容转换为Java对象&#xff0c;并将其作为参数传递给控制器方法。它通常用…

【TCPDF】使用TCPDF导出PDF文件

目录 一、安装TCPDF类库 二、安装字体 三、使用TCPDF导出PDF文件 目的&#xff1a;PHP通过TCPDF类库导出文件为PDF。 开发语言及类库&#xff1a;ThinkPHP、TCPDF 效果图如下 一、安装TCPDF类库 在项目根目录使用composer安装TCPDF&#xff0c;安装完成后会在vendor目录下…

JAVAEE初阶相关内容第十一弹--多线程(进阶)

目录 一、常见的锁策略 1乐观锁VS悲观锁 1.1乐观锁 1.2悲观锁 2.轻量级锁VS重量级锁 2.1轻量级锁 2.2重量级锁 3.自旋锁VS挂起等待锁 3.1自旋锁 3.2挂起等待锁 4.互斥锁VS读写锁 4.1互斥锁 4.2读写锁 5.公平锁VS非公平锁 5.1公平锁 5.2非公平锁 6.可重入锁VS不…

记LGSVL Map Annotation(2)导入点云、以及地图

导入点云 内置的点云导入器工具提供了将最流行的点云文件格式&#xff08;PCD、PLY、LAS、LAZ&#xff09;转换为可用于仿真的数据所需的所有功能。 要访问点云导入器窗口&#xff0c;请在 Unity 编辑器中打开模拟器项目&#xff0c;然后导航到 Simulator/Import Point Cloud…

SpringCloud学习笔记(六)OpenFeign 服务接口调用

一、OpenFeign简介 1、OpenFeign是什么 Feign是一个声明式WebService客户端&#xff0c;使用Feign能让编写Web Service客户端更加简单。 它的使用方法是定义一个服务接口然后在上面添加注解&#xff0c;Feign也支持可拔插式的编码器和解码器&#xff0c;Spring Cloud对Feign进…

SolVES4.1学习2——导入数据运行模型

使用样例数据运行模型很容易&#xff0c;运行自己的数据要根据教程先对数据进行预处理之后根据教程导入数据。 首先新建一个solves数据库&#xff0c;之后restore。导入数据大概的流程为&#xff1a; 1、导入数据 首先使用PostGIS导入矢量数据。矢量数据包括点位和范围数据。…