具体思路:
没想到可以逐段计算,老想着用栈递归保存;
栈顶为当前运行的进程,而t保留上次切换的时间;
每次进出栈都视为切换,记录每个进程的维持时间即可;
唯一要注意的是运行完是t+1;
具体代码:
class Solution {
public:
void fun(string s, int& id, bool& flag, int& time) {
vector<string>vec;
int index = 0;
for (int i = 0; i < s.size(); i++) {
if (s[i] == ':') {
vec.push_back(s.substr(index,i-index));
index = i + 1;
}
}
vec.push_back(s.substr(index, s.size() - index));
id = atoi(vec[0].c_str());
if (vec[1] == "start")
flag = true;
else
flag = false;
time= atoi(vec[2].c_str());
return;
}
vector<int> exclusiveTime(int n, vector<string>& logs) {
vector<int>ret(n,0);
int time = 0;
stack<int>st;
for (int i = 0; i < logs.size(); i++) {
int id;
bool flag;
int t;
fun(logs[i], id, flag, t);
if (flag) {
if (!st.empty()) {
ret[st.top()] += t - time;
}
st.push(id);
time = t;
}
else {
ret[st.top()] += t - time + 1;
time = t+1;
st.pop();
}
}
return ret;
}
};