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

相关文章

Python的Darts库实现时间序列预测

《Python的Darts库实现时间序列预测》Darts一个集统计、机器学习与深度学习模型于一体的Python时间序列预测库,本文主要介绍了Python的Darts库实现时间序列预测,感兴趣的可以了解... 目录目录一、什么是 Darts?二、安装与基本配置安装 Darts导入基础模块三、时间序列数据结构与

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

SpringBoot集成XXL-JOB实现任务管理全流程

《SpringBoot集成XXL-JOB实现任务管理全流程》XXL-JOB是一款轻量级分布式任务调度平台,功能丰富、界面简洁、易于扩展,本文介绍如何通过SpringBoot项目,使用RestTempl... 目录一、前言二、项目结构简述三、Maven 依赖四、Controller 代码详解五、Service

Linux系统管理与进程任务管理方式

《Linux系统管理与进程任务管理方式》本文系统讲解Linux管理核心技能,涵盖引导流程、服务控制(Systemd与GRUB2)、进程管理(前台/后台运行、工具使用)、计划任务(at/cron)及常用... 目录引言一、linux系统引导过程与服务控制1.1 系统引导的五个关键阶段1.2 GRUB2的进化优

MySQL按时间维度对亿级数据表进行平滑分表

《MySQL按时间维度对亿级数据表进行平滑分表》本文将以一个真实的4亿数据表分表案例为基础,详细介绍如何在不影响线上业务的情况下,完成按时间维度分表的完整过程,感兴趣的小伙伴可以了解一下... 目录引言一、为什么我们需要分表1.1 单表数据量过大的问题1.2 分表方案选型二、分表前的准备工作2.1 数据评估

Python Flask实现定时任务的不同方法详解

《PythonFlask实现定时任务的不同方法详解》在Flask中实现定时任务,最常用的方法是使用APScheduler库,本文将提供一个完整的解决方案,有需要的小伙伴可以跟随小编一起学习一下... 目录完js整实现方案代码解释1. 依赖安装2. 核心组件3. 任务类型4. 任务管理5. 持久化存储生产环境

MySQL中DATE_FORMAT时间函数的使用小结

《MySQL中DATE_FORMAT时间函数的使用小结》本文主要介绍了MySQL中DATE_FORMAT时间函数的使用小结,用于格式化日期/时间字段,可提取年月、统计月份数据、精确到天,对大家的学习或... 目录前言DATE_FORMAT时间函数总结前言mysql可以使用DATE_FORMAT获取日期字段