Daily LeetCode – day0009 0636. Exclusive Time of Functions

// 0636. Exclusive Time of Functions
class Solution {
    public int[] exclusiveTime(int n, List<String> logs) {
        int[] ans = new int[n];
        Stack<LogObject> stack = new Stack<>();
        for (String log : logs) {
            LogObject logObject = new LogObject(log);
            if (stack.empty()) {
                stack.push(logObject);
            } else if (logObject.isStart) {
                ans[stack.peek().functionId] += logObject.timestamp - stack.peek().timestamp;
                stack.push(logObject);
            } else {
                ans[stack.peek().functionId] += logObject.timestamp - stack.peek().timestamp + 1;
                stack.pop();
                if (!stack.empty()) {
                    stack.peek().timestamp = logObject.timestamp + 1;
                }
            }
        }
        return ans;
    }
}

class LogObject {
    int functionId;
    boolean isStart;
    int timestamp;

    LogObject(String s) {
        this.functionId = Integer.parseInt(s.substring(0, s.indexOf(':')));
        this.isStart = s.substring(s.indexOf(':') + 1, s.lastIndexOf(':')).equals("start");
        this.timestamp = Integer.parseInt(s.substring(s.lastIndexOf(':') + 1));
    }
}
学习笔记:
这是一道栈的题目,也用到了切割字符串。
这里我选择使用了创建类和转化成对象的思路来做,本来以为会导致时间和空间升高,没想到
执行用时:9 ms, 在所有 Java 提交中击败了95.92%的用户
内存消耗:41.7 MB, 在所有 Java 提交中击败了96.55%
这样写出来代码又好看又好懂真是太妙了。
这道题的难点是用栈后的五种情况,栈是不是空了,id是否一样,开关是否一样。在遇到各种情况需要怎么处理,是压栈还是出栈还是是结算,最后发现其实只有三条分支。


关于樊轶群

一个善良的理想主义者。
此条目发表在每日LeetCode分类目录。将固定链接加入收藏夹。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注