LeetCode 每日一题 ---- 【2589.完成所有任务的最少时间】

2024-05-15 17:36

本文主要是介绍LeetCode 每日一题 ---- 【2589.完成所有任务的最少时间】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

LeetCode 每日一题 ---- 【2589.完成所有任务的最少时间】

  • 2589.完成所有任务的最少时间
    • 方法:贪心+暴力

2589.完成所有任务的最少时间

方法:贪心+暴力

这道题目有多种解法,由于数据量不是很大所以这里就只采用最简的一种方式:贪心+暴力,其他的方法还有:线段树、栈+二分

第一步
将区间按照右端点从下到大排序

第二步
排序后,对于区间 tasks[i] 来说,它右侧的任务区间要么和它没有交集,要么包含它的一部分后缀。

例如排序后的区间为 [1,5],[3,7],[6,8],对于 [1,5] 来说,它右边的区间要么和它没有交集,例如 [6,8];要么交集是 [1,5] 的后缀,例如 [1,5]和 [3,7] 的交集是 [3,5],这是 [1,5] 的后缀(3,4,5 是 1,2,3,4,5 的后缀)。

第三步
遍历排序后的任务,先统计区间内的已运行的电脑运行时间点,如果个数小于 duration,则需要新增时间点。根据提示 2,尽量把新增的时间点安排在区间 [start,end] 的后缀上,这样下一个区间就能统计到更多已运行的时间点。

class Solution {public int findMinimumTime(int[][] tasks) {// 按照右边界排序Arrays.sort(tasks, (a, b) -> a[1] - b[1]);int ans = 0;int mx = tasks[tasks.length - 1][1];boolean[] run = new boolean[mx + 1];for (int[] t : tasks) {int start = t[0];int end = t[1];int d = t[2];// 电脑开机运行的时间段for (int i = start; i <= end; i ++ ) {if (run[i]) {d -- ;}}// 没有运行完 补充时间for (int i = end; d > 0; i -- ) {if (!run[i]) {run[i] = true;d -- ;ans ++ ;}}   }return ans;}
}

时间复杂度:
O(nlogn + nU)
n 是 task 的长度,U 是max(end) 的大小

空间复杂度:
O(U)

这篇关于LeetCode 每日一题 ---- 【2589.完成所有任务的最少时间】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/992479

相关文章

Django之定时任务django-crontab的实现

《Django之定时任务django-crontab的实现》Django可以使用第三方库如django-crontab来实现定时任务的调度,本文主要介绍了Django之定时任务django-cront... 目录crontab安装django-crontab注册应用定时时间格式定时时间示例设置定时任务@符号

Android实现定时任务的几种方式汇总(附源码)

《Android实现定时任务的几种方式汇总(附源码)》在Android应用中,定时任务(ScheduledTask)的需求几乎无处不在:从定时刷新数据、定时备份、定时推送通知,到夜间静默下载、循环执行... 目录一、项目介绍1. 背景与意义二、相关基础知识与系统约束三、方案一:Handler.postDel

Java controller接口出入参时间序列化转换操作方法(两种)

《Javacontroller接口出入参时间序列化转换操作方法(两种)》:本文主要介绍Javacontroller接口出入参时间序列化转换操作方法,本文给大家列举两种简单方法,感兴趣的朋友一起看... 目录方式一、使用注解方式二、统一配置场景:在controller编写的接口,在前后端交互过程中一般都会涉及

python处理带有时区的日期和时间数据

《python处理带有时区的日期和时间数据》这篇文章主要为大家详细介绍了如何在Python中使用pytz库处理时区信息,包括获取当前UTC时间,转换为特定时区等,有需要的小伙伴可以参考一下... 目录时区基本信息python datetime使用timezonepandas处理时区数据知识延展时区基本信息

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指

Java中字符串转时间与时间转字符串的操作详解

《Java中字符串转时间与时间转字符串的操作详解》Java的java.time包提供了强大的日期和时间处理功能,通过DateTimeFormatter可以轻松地在日期时间对象和字符串之间进行转换,下面... 目录一、字符串转时间(一)使用预定义格式(二)自定义格式二、时间转字符串(一)使用预定义格式(二)自

Spring Boot 集成 Quartz并使用Cron 表达式实现定时任务

《SpringBoot集成Quartz并使用Cron表达式实现定时任务》本篇文章介绍了如何在SpringBoot中集成Quartz进行定时任务调度,并通过Cron表达式控制任务... 目录前言1. 添加 Quartz 依赖2. 创建 Quartz 任务3. 配置 Quartz 任务调度4. 启动 Sprin

Linux之计划任务和调度命令at/cron详解

《Linux之计划任务和调度命令at/cron详解》:本文主要介绍Linux之计划任务和调度命令at/cron的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux计划任务和调度命令at/cron一、计划任务二、命令{at}介绍三、命令语法及功能 :at

SpringQuartz定时任务核心组件JobDetail与Trigger配置

《SpringQuartz定时任务核心组件JobDetail与Trigger配置》Spring框架与Quartz调度器的集成提供了强大而灵活的定时任务解决方案,本文主要介绍了SpringQuartz定... 目录引言一、Spring Quartz基础架构1.1 核心组件概述1.2 Spring集成优势二、J