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

相关文章

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

在Golang中实现定时任务的几种高效方法

《在Golang中实现定时任务的几种高效方法》本文将详细介绍在Golang中实现定时任务的几种高效方法,包括time包中的Ticker和Timer、第三方库cron的使用,以及基于channel和go... 目录背景介绍目的和范围预期读者文档结构概述术语表核心概念与联系故事引入核心概念解释核心概念之间的关系

springboot如何通过http动态操作xxl-job任务

《springboot如何通过http动态操作xxl-job任务》:本文主要介绍springboot如何通过http动态操作xxl-job任务的问题,具有很好的参考价值,希望对大家有所帮助,如有错... 目录springboot通过http动态操作xxl-job任务一、maven依赖二、配置文件三、xxl-

Navicat数据表的数据添加,删除及使用sql完成数据的添加过程

《Navicat数据表的数据添加,删除及使用sql完成数据的添加过程》:本文主要介绍Navicat数据表的数据添加,删除及使用sql完成数据的添加过程,具有很好的参考价值,希望对大家有所帮助,如有... 目录Navicat数据表数据添加,删除及使用sql完成数据添加选中操作的表则出现如下界面,查看左下角从左

Python打印对象所有属性和值的方法小结

《Python打印对象所有属性和值的方法小结》在Python开发过程中,调试代码时经常需要查看对象的当前状态,也就是对象的所有属性和对应的值,然而,Python并没有像PHP的print_r那样直接提... 目录python中打印对象所有属性和值的方法实现步骤1. 使用vars()和pprint()2. 使

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

Python pip下载包及所有依赖到指定文件夹的步骤说明

《Pythonpip下载包及所有依赖到指定文件夹的步骤说明》为了方便开发和部署,我们常常需要将Python项目所依赖的第三方包导出到本地文件夹中,:本文主要介绍Pythonpip下载包及所有依... 目录步骤说明命令格式示例参数说明离线安装方法注意事项总结要使用pip下载包及其所有依赖到指定文件夹,请按照以

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

利用Python实现时间序列动量策略

《利用Python实现时间序列动量策略》时间序列动量策略作为量化交易领域中最为持久且被深入研究的策略类型之一,其核心理念相对简明:对于显示上升趋势的资产建立多头头寸,对于呈现下降趋势的资产建立空头头寸... 目录引言传统策略面临的风险管理挑战波动率调整机制:实现风险标准化策略实施的技术细节波动率调整的战略价