LeetCode-2589. 完成所有任务的最少时间【栈 贪心 数组 二分查找 排序】

LeetCode-2589. 完成所有任务的最少时间【栈 贪心 数组 二分查找 排序】

  • 题目描述:
  • 解题思路一:贪心+暴力
  • 解题思路二:栈+二分查找
  • 解题思路三:简化版

题目描述:

你有一台电脑,它可以 同时 运行无数个任务。给你一个二维整数数组 tasks ,其中 tasks[i] = [starti, endi, durationi] 表示第 i 个任务需要在 闭区间 时间段 [starti, endi] 内运行 durationi 个整数时间点(但不需要连续)。

当电脑需要运行任务时,你可以打开电脑,如果空闲时,你可以将电脑关闭。

请你返回完成所有任务的情况下,电脑最少需要运行多少秒。

示例 1:

输入:tasks = [[2,3,1],[4,5,1],[1,5,2]]
输出:2
解释:

  • 第一个任务在闭区间 [2, 2] 运行。
  • 第二个任务在闭区间 [5, 5] 运行。
  • 第三个任务在闭区间 [2, 2] 和 [5, 5] 运行。
    电脑总共运行 2 个整数时间点。

示例 2:

输入:tasks = [[1,3,2],[2,5,3],[5,6,2]]
输出:4
解释:

  • 第一个任务在闭区间 [2, 3] 运行
  • 第二个任务在闭区间 [2, 3] 和 [5, 5] 运行。
  • 第三个任务在闭区间 [5, 6] 运行。
    电脑总共运行 4 个整数时间点。

提示:

1 <= tasks.length <= 2000
tasks[i].length == 3
1 <= starti, endi <= 2000
1 <= durationi <= endi - starti + 1

解题思路一:贪心+暴力

三个关键点。1. 按区间右端点排序。2. 把任务尽可能安排在区间的后缀。3. 用数组记录任务的执行情况
在这里插入图片描述

class Solution:def findMinimumTime(self, tasks: List[List[int]]) -> int:tasks.sort(key = lambda x: x[1]) # 排序run = [False] * (tasks[-1][1] + 1) # 初始化确定哪些时间运行的数组for s, e, d in tasks:d -= sum(run[s: e + 1])  # 去掉运行中的时间点if d <= 0:  # 该任务已完成continuefor i in range(e, s-1, -1): # 标记需要运行的时间点if run[i]:continuerun[i] = Trued -= 1if d == 0:breakreturn sum(run)

时间复杂度:O(nM)其中 n 是 tasks 的大小,M 是 tasks 的时间段右端点 end 的最大值。
空间复杂度:O(logn + M) 排序和记录的数组

解题思路二:栈+二分查找

在这里插入图片描述

class Solution:def findMinimumTime(self, tasks: List[List[int]]) -> int:tasks.sort(key=lambda t: t[1])# 栈中保存闭区间左右端点,栈底到栈顶的区间长度的和st = [(-2, -2, 0)]  # 哨兵,保证不和任何区间相交for start, end, d in tasks:_, r, s = st[bisect_left(st, (start,)) - 1]d -= st[-1][2] - s  # 去掉运行中的时间点if start <= r:  # start 在区间 st[i] 内d -= r - start + 1  # 去掉运行中的时间点if d <= 0:continuewhile end - st[-1][1] <= d:  # 剩余的 d 填充区间后缀l, r, _ = st.pop()d += r - l + 1  # 合并区间st.append((end - d + 1, end, st[-1][2] + d))return st[-1][2]

时间复杂度:O(nlogn)
空间复杂度:O(n)

解题思路三:简化版

class Solution:def findMinimumTime(self, tasks: List[List[int]]) -> int:tasks.sort(key = lambda x: x[1])run = [False] * (tasks[-1][1] + 1)for s, e, d in tasks:d -= sum(run[s: e + 1]) # 先减去已经运行的时间if d <= 0: # 已经okcontinuefor i in range(e, s - 1, -1): # 还没okif run[i]:continuerun[i] = Trued -= 1if d == 0:breakreturn sum(run)

时间复杂度:O(nM)其中 n 是 tasks 的大小,M 是 tasks 的时间段右端点 end 的最大值。
空间复杂度:O(logn + M) 排序和记录的数组


创作不易,观众老爷们请留步… 动起可爱的小手,点个赞再走呗 (๑◕ܫ←๑)
欢迎大家关注笔者,你的关注是我持续更博的最大动力


原创文章,转载告知,盗版必究



在这里插入图片描述


在这里插入图片描述
♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠

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

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

相关文章

解锁电商数据之门:京东商品详情API接口的深度解析与应用指南

一、京东商品详情API简介 京东商品详情API是京东开放平台提供的一项服务&#xff0c;允许第三方应用通过调用接口获取京东商城中商品的详细信息。这些信息包括但不限于商品名称、价格、库存、详情描述、用户评价等。 二、功能特点 数据全面&#xff1a;提供商品的全方位数据…

mac安装两个版本谷歌浏览器;在mac运行不同版本的chrome浏览器

场景 正常情况下&#xff0c;mac上只能安装一个版本的chrome浏览器&#xff0c;即使你安装了两个版本的&#xff0c;打开老旧版本时候也会自动切换成最新版的浏览器 故本文主要解决如何下载和在mac运行不同版本的chrome浏览器 文章目录 场景一、下载1.mac本身就有一个最新版ch…

Java语言saas模式云HIS系统源码 前端Angular+后台SpringBoot云HIS系统源码 HIS系统适合哪些类型的医院?

Java语言saas模式云HIS系统源码 前端Angular后台SpringBoot云HIS系统源码 HIS系统适合哪些类型的医院&#xff1f; 云HIS系统&#xff08;医院信息系统&#xff09;是对医院及其所属各部门的人、财、物进行综合管理&#xff0c;对在医疗活动各阶段产生的数据进行采集、储存、处…

CCF20181201——小明上学

CCF20181201——小明上学 代码如下&#xff1a; #include<bits/stdc.h> using namespace std; int main() {int r,y,g,n,k[101],t[101],sum0;cin>>r>>y>>g;cin>>n; for(int i0;i<n;i){cin>>k[i]>>t[i];if(k[i]0||k[i]1)sumt[i];…

ITSM的服务台如何让工作更流畅

在现代企业的信息技术管理框架内&#xff0c;IT服务管理&#xff08;IT Service Management, ITSM&#xff09;体系扮演着至关重要的角色&#xff0c;而其中的服务台则是这一复杂体系的心脏地带。服务台不仅仅是解答技术疑问的一线窗口&#xff0c;更是企业IT运维效率与用户满意…

C++初探_关联容器

关联容器将键和值关联在一起&#xff0c;并使用键来查找值。STL提供的四种关联容器&#xff1a; &#xff08;1&#xff09;set 键类型与值类型相同&#xff0c;键值对一一对应&#xff1b; &#xff08;2&#xff09;multiset 键类型与值类型相同&#xff0c;一个键可能对…

FENDI CLUB啤酒,为何女生喜欢?

精酿啤酒已经成了女生喜欢的饮品&#xff0c;在日剧《无法成为野兽的我们》里&#xff0c;主人公小晶永远保持标准笑容&#xff0c;完美完成所有的工作。只有一个人的时候&#xff0c;她才会放下习惯性的微笑&#xff0c;显露自己的疲惫。小晶缓解疲惫&#xff0c;就是下班后去…

尽微好物:从0到10亿+的抖音电商的TOP1“联盟团长”,如何使用NineData实现上云下云

杭州尽微供应链是抖⾳平台⽉均带货10E的TOP1“联盟团⻓”&#xff0c;是字节跳动⼀级代理商&#xff0c;巨量千川指定服务商&#xff0c;拥有商品库9万&#xff0c;是⾏业领先的电商供应链平台&#xff0c;达⼈陪跑机构。 杭州尽微供应链以天猫、京东抖音电商业务为依托&#x…

代码随想录Day41(01背包问题):卡玛网46、Leetcode416

卡玛网46&#xff1a; 问题描述&#xff1a; 小明是一位科学家&#xff0c;他需要参加一场重要的国际科学大会&#xff0c;以展示自己的最新研究成果。他需要带一些研究材料&#xff0c;但是他的行李箱空间有限。这些研究材料包括实验设备、文献资料和实验样本等等&#xff0…

HCIP-Datacom(H12-821)题库补充(5月16日)

最新 HCIP-Datacom&#xff08;H12-821&#xff09;完整题库请扫描上方二维码访问&#xff0c;持续更新中。 以下关于配置防火墙安全优先级的描述&#xff0c;错误的是哪一项&#xff1f; A&#xff1a;不新建与默认安全区域同名的安全区域 B&#xff1a;同一系统中&#xff0c…

「服务器」Nginx详解

本文主要介绍Nginx的原理和服务器部署Node.js项目。 一、Nginx原理 Nginx是一个高性能的HTTP服务器和反向代理服务器&#xff0c;它以高稳定性、丰富的功能集、简单的配置和低资源消耗而闻名。以下是对Nginx的一些详解&#xff1a; 1. Nginx是什么&#xff1f; Nginx&#x…

镊子蜡烛如何设置止盈止损?Anzo Capital昂首资本盈利收场

通过上一篇文章各位聪明的投资者&#xff0c;都已经知道了什么是镊子蜡烛图以及如何抓住反转进行交易&#xff0c;同时也有很多投资者不知道如何设置止盈止损&#xff1f;今天Anzo Capital昂首资本就和各位投资者一起探讨如何盈利收场。 看跌的镊子模式如何交易&#xff1f;首…

【数据结构】树(Tree)

✨✨✨专栏&#xff1a;数据结构 &#x1f9d1;‍&#x1f393;个人主页&#xff1a;SWsunlight 目录 一、基本概念&#xff1a; 1、定义&#xff1a; ​编辑 ​编辑 2、树的成分&#xff1a; 3、树的性质&#xff1a; 二、存储方式&#xff1a; ​编辑 双亲表示法…

C++-float与double

float和double是两种不同的数据类型&#xff0c;用于存储浮点数&#xff08;小数&#xff09;。 1.精度&#xff1a; float是单精度浮点数&#xff0c;占用4个字节&#xff0c;通常精度为6-9位小数。 double是双精度浮点数&#xff0c;占用8个字节&#xff0c;通常精度为15-…

Open3D 点云多平面探测(Python)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 Open3D为我们提供了一种点云多平面探测的算法,该算法使用基于鲁棒统计的方法进行平面补丁检测。该算法具体过程:首先将点云细分为更小的块(使用八叉树),然后尝试为每个块匹配一个平面。如果平面通过了鲁棒平面性…

【C语言每日题解】用函数来模拟实现strlen()、strcpy()、strcmp()、strcat()

&#x1f970;欢迎关注 轻松拿捏C语言系列&#xff0c;来和 小哇 一起进步&#xff01;✊ 学习了函数后&#xff0c;老师让我们用函数来实现上面这四个字符串函数。 我们首先来了解一下这四个字符串函数&#xff1a; 1.strlen函数 用于获取字符串长度&#xff08;不包括末尾…

【源码】相亲交友系统全新UI/情感测试/婚庆中介/交友系统

【交友】相亲交友系统全新UI/情感测试/婚庆中介/交友系统 带商城&#xff0c;情感测试。 https://www.52codes.cc/codes/qt

从开发板导出根文件系统并修改(Ubuntu)

前面提到过基于ubuntu-base去构建根文件系统基于Ubuntu-base构建根文件系统-CSDN博客&#xff0c;但是有时候我们并不需要重头开始&#xff0c;可以基于现有的根文件系统做调整。又或者我们直接在出厂的系统上去搭建好自己的运行环境并且编译出自己想要的程序&#xff0c;现在要…

医学科技查新中对查新点的撰写方法!附案例讲解!

我国的科技查新工作最早是从医学领域开始的&#xff0c;始于1985年中国科学院医学情报所&#xff0c;后来逐步发展到工、农等其 他各个领域。医学科技查新包括立项查新和成果查新两个部分&#xff0c;其中医学立项查新&#xff0c;它是指在医学科研项目申报开题之前&#xff0c…

Linux上diff命令

diff 是一个 Linux 下的命令行工具&#xff0c;用于比较文本文件或目录之间的差异。它会逐行比较两个文件的内容&#xff0c;并输出它们之间的不同之处。diff 命令通常用于查找文件间的差异&#xff0c;特别是用于比较文件的修改&#xff0c;合并文件或者检查文件的一致性。 基…