給出乙個非搶占單執行緒cpu的 n 個函式執行日誌,找到函式的獨佔時間。
每個函式都有乙個唯一的 id,從 0 到 n-1,函式可能會遞迴呼叫或者被其他函式呼叫。
日誌是具有以下格式的字串:function_id:start_or_end:timestamp。例如:「0:start:0」 表示函式 0 從 0 時刻開始執行。「0: end :0」 表示函式 0 在 0 時刻結束。
函式的獨佔時間定義是在該方法中花費的時間,呼叫其他函式花費的時間不算該函式的獨佔時間。你需要根據函式的 id 有序地返回每個函式的獨佔時間。
示例 1:
輸入:
n = 2
logs =
["0:start:0",
"1:start:2",
"1:end:5",
"0:end:6"]
輸出:[3, 4]
說明:函式 0 在時刻 0 開始,在執行了 2個時間單位結束於時刻 1。
現在函式 0 呼叫函式 1,函式 1 在時刻 2 開始,執行 4 個時間單位後結束於時刻 5。
函式 0 再次在時刻 6 開始執行,並在時刻 6 結束執行,從而執行了 1 個時間單位。
所以函式 0 總共的執行了 2 +1 =3 個時間單位,函式 1 總共執行了 4 個時間單位。
說明:
輸入的日誌會根據時間戳排序,而不是根據日誌id排序。
你的輸出會根據函式id排序,也就意味著你的輸出陣列中序號為 0 的元素相當於函式 0 的執行時間。
兩個函式不會在同時開始或結束。
函式允許被遞迴呼叫,直到執行結束。
1 <= n <= 100
思路分析:這裡的函式存在巢狀、遞迴呼叫,所以這時stack的「先進後出」的特性就能發揮出來。
掃瞄所有log
如果該log是啟動函式,直接放入stack
否則計算這個函式的執行時間(棧頂),但是還有一點,如果計算了當前函式執行時間,棧還是不為空,則說明棧頂元素巢狀執行了當前函式,需要減去當前函式的執行時間。
class
solution
index +=1;
//第二步:讀取操作型別
while
(log[index]
!=':'
) index +=1;
//第三步:讀取時間戳
while
(index < logsize)
//第四步:根據操作進行不同的處理
LeetCode636 函式的獨佔時間
給出乙個非搶占單執行緒cpu的n個函式執行日誌,找到函式的獨佔時間。每個函式都有乙個唯一的 id,從0到n 1,函式可能會遞迴呼叫或者被其他函式呼叫。日誌是具有以下格式的字串 function id start or end timestamp。例如 0 start 0 表示函式 0 從 0 時刻開...
函式的獨佔時間 python
題目描述 給出乙個非搶占單執行緒cpu的n個函式執行日誌,找到函式的獨佔時間。每個函式都有乙個唯一的 id,從0到n 1,函式可能會遞迴呼叫或者被其他函式呼叫。日誌是具有以下格式的字串 function id start or end timestamp。例如 0 start 0 表示函式 0 從 ...
636 函式的獨佔時間
題目 給出乙個非搶占單執行緒cpu的 n 個函式執行日誌,找到函式的獨佔時間。每個函式都有乙個唯一的 id,從 0 到 n 1,函式可能會遞迴呼叫或者被其他函式呼叫。日誌是具有以下格式的字串 function id start or end timestamp。例如 0 start 0 表示函式 0...