LeetCode 636. 函数的独占时间(栈)
文章目錄
- 1. 題目
- 2. 解題
1. 題目
給出一個(gè)非搶占單線程CPU的 n 個(gè)函數(shù)運(yùn)行日志,找到函數(shù)的獨(dú)占時(shí)間。
每個(gè)函數(shù)都有一個(gè)唯一的 Id,從 0 到 n-1,函數(shù)可能會(huì)遞歸調(diào)用或者被其他函數(shù)調(diào)用。
日志是具有以下格式的字符串:function_id:start_or_end:timestamp。
例如:"0:start:0" 表示函數(shù) 0 從 0 時(shí)刻開始運(yùn)行。
"0:end:0" 表示函數(shù) 0 在 0 時(shí)刻結(jié)束。
函數(shù)的獨(dú)占時(shí)間定義是在該方法中花費(fèi)的時(shí)間,調(diào)用其他函數(shù)花費(fèi)的時(shí)間不算該函數(shù)的獨(dú)占時(shí)間。
你需要根據(jù)函數(shù)的 Id 有序地返回每個(gè)函數(shù)的獨(dú)占時(shí)間。
來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/exclusive-time-of-functions
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
2. 解題
class Solution {public:vector<int> exclusiveTime(int n, vector<string>& logs) {vector<int> time(n, 0);stack<pair<int,int>> s;// id, timeint id, t, period = 0, p1, p2;for(auto& log : logs){p1 = log.find(':');id = stoi(log.substr(0,p1));//提取idp2 = log.find_last_of(':');t = stoi(log.substr(p2+1));//提取tif(log[p1+1]=='e')//當(dāng)前是結(jié)束,那么棧頂是開始{period = t-s.top().second+1;//當(dāng)前函數(shù)的執(zhí)行時(shí)間time[id] += period;//函數(shù)執(zhí)行時(shí)間增加s.pop();//彈棧if(!s.empty())//棧不為空,說(shuō)明有外層函數(shù)// 外層函數(shù)的時(shí)間要減去內(nèi)層執(zhí)行時(shí)間time[s.top().first] -= period;}else{s.push({id, t});}}return time;} };28 ms 13 MB
我的CSDN博客地址 https://michael.blog.csdn.net/
長(zhǎng)按或掃碼關(guān)注我的公眾號(hào)(Michael阿明),一起加油、一起學(xué)習(xí)進(jìn)步!
總結(jié)
以上是生活随笔為你收集整理的LeetCode 636. 函数的独占时间(栈)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: LeetCode 1642. 可以到达的
- 下一篇: LeetCode 1561. 你可以获得