import java.util.List;
import java.util.Stack;
public class Solution {
public int[] exclusiveTime(int n, List<String> logs) {
int[] times = new int[n];
Stack<Element> stack = new Stack();
for (int i = 0; i < logs.size(); i++) {
String curr[] = logs.get(i).split(":");
if (curr[1].equals("start")) {
Element currElement = new Element();
currElement.id = Integer.parseInt(curr[0]);
currElement.startTime = Integer.parseInt(curr[2]);
currElement.speedTime = 0;
//栈顶元素CPU被抢占
if (!stack.empty()) {
Element top = stack.pop();
top.speedTime += currElement.startTime - top.startTime;
stack.push(top);
}
stack.push(currElement);
} else if(curr[1].equals("end")){
Element popElement = stack.pop();
int endTime = Integer.parseInt(curr[2]);
popElement.speedTime += endTime - popElement.startTime+1;
//考虑递归调用
times[popElement.id]+=popElement.speedTime;
//下一个栈顶元素重新恢复执行
if (!stack.empty()) {
Element top = stack.pop();
top.startTime = endTime+1;
stack.push(top);
}
}
}
return times;
}
class Element {
int id;
int speedTime;
int startTime;
}
}