Python程式:查詢每個區間內完成的任務數量
假設我們有一個區間列表,每個區間都類似於[開始,結束),我們還有一個名為型別的字串列表。現在,對於給定的i,intervals[i]顯示某人在[開始,結束)時間段內完成job types[i]的工作。相同型別的兩個區間絕不會重疊或接觸。因此,我們必須找到一個排序的合併列表,其中每個專案都有[開始,結束,num_types],表示從開始到結束,正在進行num_types個任務。
例如,如果輸入為intervals = [[0, 3], [5, 7], [0, 7]],types = ["問題解決", "新聞", "遊戲"], 那麼輸出將為[[0, 3, 2], [3, 5, 1], [5, 7, 2]],因為我們有以下幾種工作正在進行:[0, 3)之間"問題解決"和"遊戲",[3, 5)之間"遊戲",以及[5, 7)之間"新聞"和"遊戲"。
為了解決這個問題,我們將遵循以下步驟:
ev := 一個新的列表
對於intervals中的每個區間開始結束對(s, e),執行:
在ev的末尾插入(s, 1)
在ev的末尾插入(e, -1)
對列表ev進行排序
cnt := 0, last := -1
ans := 一個新的列表
對於ev中的每個時間和增量引數(t, inc),執行:
如果t與last不同且cnt與0不同,則
cnt := cnt + inc
last := t
返回ans
讓我們來看下面的實現,以便更好地理解:
示例
class Solution: def solve(self, intervals, jobs): ev = [] for s, e in intervals: ev.append((s, 1)) ev.append((e, −1)) ev.sort() cnt = 0 last = −1 ans = [] for t, inc in ev: if t != last and cnt != 0: ans.append([last, t, cnt]) cnt += inc last = t return ans ob = Solution() intervals = [ [0, 3], [5, 7], [0, 7] ] types = ["problem solving", "news", "game play"] print(ob.solve(intervals, types))
輸入
[[0, 3],[5, 7],[0, 7]], ["problem solving", "news", "game play"]
輸出
[[0, 3, 2], [3, 5, 1], [5, 7, 2]]
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP