LeetCode 636
Exclusive Time of Functions
Problem Description:
记录每一函数运行时间,其中需要注意到当前函数start开始时,上一个函数可能还米有end。
具体的题目信息:
https://leetcode.com/problems/exclusive-time-of-functions/description/Examples:
function id | status(start/end) | time |
---|---|---|
0 | start | 0 |
1 | start | 2 |
2 | start | 3 |
2 | end | 5 |
1 | end | 7 |
0 | end | 10 |
- Solution:
class Solution {
public:
vector<int> exclusiveTime(int n, vector<string>& logs) {
vector<int> ans(n, 0);
stack<int> id;
// 栈用来存储每一条记录的id
int prev;
// prev用来记录上一条记录的时间戳
for (int i = 0; i < logs.size(); i++) {
string num = "";
string time = "";
string status = "";
int t1 = logs[i].find(":");
int t2 = logs[i].rfind(":");
// 对每一条记录进行处理,用num来记录id,用time来记录读取到的时间,用status来记录读取到的时间是起始时间还是终止时间
num = logs[i].substr(0, t1);
time = logs[i].substr(t2+1,logs[i].length()-1-t2);
status = logs[i].substr(t1+1, 1);
int num_i = changeTime(num);
int time_i = changeTime(time);
if (status == "s") {
if(!id.empty()) {
//若本条记录的start time早于上一条记录的end time,则栈不为空,两条记录之间的时间包括在上一条记录的运行时间里面
ans[id.top()] += time_i-prev;
}
id.push(num_i);
prev = time_i;
} else {
ans[id.top()] += time_i-prev+1;
id.pop();
prev = time_i+1;
}
}
return ans;
}
// 自定义函数,用于将读取到的时间字符串转化成数字
int changeTime(string t) {
int re = 0;
for (int i = 0; i < t.length(); i++) {
re = re*10+t[i]-'0';
}
return re;
}
};