问答

当前位置
  • 首页
  • 问答
  • Exclusive Time of Functions 请教一个问题

Exclusive Time of Functions 请教一个问题

  • Ta: Tony

想问一下下面的答案中为什么要有 prev = curr + 1呢?这句话的目的是什么?

class Solution {
    public int[] exclusiveTime(int n, List<String> logs) {
        int[] res = new int[n];
        Stack<Integer> stack = new Stack<>();
        int prev = 0;
        for (String log : logs){
            String[] strs = log.split(":");
            int id = Integer.parseInt(strs[0]);
            int curr = Integer.parseInt(strs[2]);
            if (strs[1].equals("start")){
                if (!stack.isEmpty()){
                    res[stack.peek()] += curr - prev;
                }
                stack.push(id);
                prev = curr;
            }else{
                res[stack.pop()] += curr - prev + 1;
                prev = curr + 1; // 这里!!!!!
            }
        }
        return res;
    }
}

1 个回复

2019-09-18 衡助教

举个栗子:
0:start:0
1:start:1
1:end:2
0:end:3
其中,1:end:2进入这个else分支。在这个分支内,首先计算出了1这个函数的运行时间为2。代表第1s,第2s被函数1占用了。如果此时prev依然为2,代表第2s是空闲的。
那么,进行下一步0:end:3时,函数1加上的时间为(3-2)+1 =2.可以发现这里加了2s,代表第2s,和第3s。

综上,如果prev不+1,那么这1s会被重复利用,计算到两个函数的运行时间中。

我来回答

您没有权限

为提高问答质量,问答版块发言权限只向九章学员开放

登录 注册

© Jiu Zhang 2013-. All rights reserved. 京ICP备16004690号-1