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.pswp.cn/diannao/13491.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/13491.shtml
英文地址,請注明出處:http://en.pswp.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;合并文件或者檢查文件的一致性。 基…