函数的独占时间

107 阅读1分钟

函数的独占时间

有一个 单线程 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
}