1. 单位interval: 有start有end;
  2. start对应的这个就push入栈,这个thread结束了就出栈
  3. 因为每时刻都只能有一个thread在执行,所以时间长度就是那个thread的end时间减去其开始的start时间
  4. 因为有current时间片段属于/不属于这个thread的问题, 所以+1与否需要注意.
  5. timestamps需要是in a chronological order; 没有说,但是实际上默认要这样
  6. 是按照上面5的说法时间轴增加的顺序之后,prev实际上是时间点的pointer对应时间点的顺序
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public int[] exclusiveTime(int n, List<String> logs) {
int[] res = new int[n];
Stack<Integer> st = new Stack<>();
int pre = 0;

for (String log : logs) {
String[] arr = log.split(":");
if (arr[1].equals("start")) {
if (!st.empty()) res[st.peek()] += Integer.parseInt(arr[2]) - pre;
st.push(Integer.parseInt(arr[0])); // res: index
pre = Integer.parseInt(arr[2]);
} else {
res[st.pop()] += Integer.parseInt(arr[2]) - pre + 1;
pre = Integer.parseInt(arr[2]) + 1;
}
}

return res;
}