函式的獨佔時間 python

2021-09-22 17:49:13 字數 1429 閱讀 3033

題目描述:

給出乙個非搶占單執行緒cpu的n個函式執行日誌,找到函式的獨佔時間。

每個函式都有乙個唯一的 id,從0n-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

class solution(object):

def exclusivetime(self, n, logs):

""":type n: int

:type logs: list[str]

:rtype: list[int]

"""#思路:每次從logs中取出一條資料,若其為start則直接壓入;若其為end則將棧頂資料取出並進行最終結果計算

res = [0] * n

stack =

for s in logs:

tmp = s.split(':')

if tmp[1] == 'start':

else:

temp = stack.pop()

time = int(tmp[2]) - temp[1] + 1

res[temp[0]] = res[temp[0]] + time

if len(stack) != 0:

res[stack[-1][0]] = res[stack[-1][0]] - time

return res

菜鳥一枚,**僅供參考,如有問題,望指正~

636 函式的獨佔時間

題目 給出乙個非搶占單執行緒cpu的 n 個函式執行日誌,找到函式的獨佔時間。每個函式都有乙個唯一的 id,從 0 到 n 1,函式可能會遞迴呼叫或者被其他函式呼叫。日誌是具有以下格式的字串 function id start or end timestamp。例如 0 start 0 表示函式 0...

演算法 函式的獨佔時間

昨晚通宵發版,導致今天狀態很差。思路有點亂 這個題目來自leetcode 636.函式的獨佔時間 題目不複製了 題解 理解題意 函式的呼叫,代表函式一定是閉合的。也就是說,子函式結束之前,母函式一定是沒有結束的。母函式的結束一定在子函式結束之後。這個解法,巧妙的地方在於casttime的運用。這樣,...

LeetCode 函式的獨佔時間(輔助stack)

給出乙個非搶占單執行緒cpu的 n 個函式執行日誌,找到函式的獨佔時間。每個函式都有乙個唯一的 id,從 0 到 n 1,函式可能會遞迴呼叫或者被其他函式呼叫。日誌是具有以下格式的字串 function id start or end timestamp。例如 0 start 0 表示函式 0 從 ...