有一个 单线程 CPU 正在运行一个含有 n 道函数的程序。每道函数都有一个位于 0 和 n-1 之间的唯一标识符。
函数调用 存储在一个 调用栈 上 :当一个函数调用开始时,它的标识符将会推入栈中。而当一个函数调用结束时,它的标识符将会从栈中弹出。标识符位于栈顶的函数是 当前正在执行的函数 。每当一个函数开始或者结束时,将会记录一条日志,包括函数标识符、是开始还是结束、以及相应的时间戳。
var exclusiveTime = function (n, logs) {
const len = logs.length
const res = new Array(n).fill(0)
const stack = []
let arr = logs[0].split(':')
let prev = arr[2]
let i = 1
stack[0] = arr[2]
while (i < len) {
arr = logs[i].split(':')
if (arr[1] === 'start') {
res[stack[stack.length - 1]] += arr[2] - prev
stack.push(arr[0])
prev = arr[2]//这里的prev是为了下一次出栈
} else {
const tem = stack.pop()
res[tem] += arr[2] - prev + 1
prev = arr[2] - 0 + 1 // 这里的prev是为了下一次入栈执行的prev
}
i++
}
return res
}