The key to the problem is `how should we define interval`

?

In the solution, I used a variable `prev`

to store the previous node timestamp. If the previous node is a start, means it belongs to the current evaluating function, then `prev = start time`

. In contrast, if the previous node is an end, means that belongs to previous function, `prev = end time + 1`

. In this way, we can properly deal with the interval calculation.

```
class Solution {
public int[] exclusiveTime(int n, List<String> logs) {
if (logs == null || logs.size() == 0) return new int[0];
int[] res = new int[n];
Deque<Integer> stack = new ArrayDeque<>();
int prev = 0;
for (int i = 0; i < logs.size(); i++) {
String[] strs = logs.get(i).split(":");
int time = Integer.parseInt(strs[2]);
if (strs[1].equals("start")) {
if (!stack.isEmpty()) {
stack.push(stack.pop() + time - prev);
}
stack.push(0);
prev = time;
} else if (strs[1].equals("end")) {
int index = Integer.parseInt(strs[0]);
prev = time + 1;
}
}
return res;
}
}
```