636. Exclusive Time of Functions

Medium

这题卡在一个地方挺久,就是"1:end:5","0:end:6"这样子的情况下,后面的任务0其实只持续了1 time, 要怎么处理?后来看了答案受了启发,只需要再遇到end的时候,把prevTime update到time – 1, 就是这段代码:

 else if (arr[1].equals("end")){
                res[stack.pop()] += time - prevTime + 1;
                prevTime = time + 1;
            }

这种细节自己写想不到怎么处理

class Solution {
    public int[] exclusiveTime(int n, List<String> logs) {
        int[] res = new int[n];
        Stack<Integer> stack = new Stack<>();
        int prevTime = 0;
        for (String log : logs){
            String[] arr = log.split(":");
            int id = Integer.parseInt(arr[0]);
            int time = Integer.parseInt(arr[2]);
            if (arr[1].equals("start")){
                if (!stack.isEmpty()){
                    res[stack.peek()] += time - prevTime;
                }
                prevTime = time;
                stack.push(id);
            } else if (arr[1].equals("end")){
                res[stack.pop()] += time - prevTime + 1;
                prevTime = time + 1;
            }
        }
        return res;
    }
}
    原文作者:greatfulltime
    原文地址: https://www.jianshu.com/p/786ac3a10ae1
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞