LeetCode636 函式的獨佔時間

2021-09-23 20:21:14 字數 1263 閱讀 3472

給出乙個非搶占單執行緒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

解析:這個題目拿到手裡的時候感覺很複雜,所以也沒做出來。後來看了解析,基本就是需要根據「:」將字串的3個部分分開。然後根據型別,判斷是需要出棧還是進棧。每個函式定義乙個持續時間duration,記錄函式的生存週期(注意不是獨佔時間),用棧儲存id和time,用結果陣列res儲存最終的每個函式的獨佔時間。函式獨佔時間=函式生存週期-子函式的生存週期。

**:

vectorexclusivetime(int n, vector& logs) );

else

}return ans;

}

636 函式的獨佔時間

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

leetcode 有效的數獨

判斷乙個 9x9 的數獨是否有效。只需要根據以下規則,驗證已經填入的數字是否有效即可。數字 1 9 在每一行只能出現一次。數字 1 9 在每一列只能出現一次。數字 1 9 在每乙個以粗實線分隔的 3x3 宮內只能出現一次。上圖是乙個部分填充的有效的數獨。數獨部分空格內已填入了數字,空白格用 表示。示...

LeetCode陣列 有效的數獨

有效的數獨 判斷乙個 9x9 的數獨是否有效。只需要根據以下規則,驗證已經填入的數字是否有效即可。數字 1 9 在每一行只能出現一次。數字 1 9 在每一列只能出現一次。數字 1 9 在每乙個以粗實線分隔的 3x3 宮內只能出現一次。上圖是乙個部分填充的有效的數獨。數獨部分空格內已填入了數字,空白格...