美文网首页
栈-N636-函数的独占时间

栈-N636-函数的独占时间

作者: 三次元蚂蚁 | 来源:发表于2019-04-06 10:40 被阅读0次

题目

  • 概述:给定n个函数的运行日志,让你给出每个函数的独占时间

    独占时间不包括调用其他函数的时间

    函数可能会被递归调用或被其它函数调用

  • 输入:

    1. 函数数量n,范围[1, 100]

    2. 函数日志列表,格式为"function_id:start_or_end:timestamp":

      1. function_id:函数ID,范围为[0, n-1]
      2. start_or_end:start或者end
      3. timestamp:函数开始时间或结束时间

      输入日志会根据时间戳排序

      两个函数不会在同时开始或结束

  • 输出:按函数ID依次输出函数的独占时间

  • 出处:https://leetcode-cn.com/problems/exclusive-time-of-functions/

思路

  • 函数的调用系统就是用栈实现的,所以这里也使用栈

  • 观察函数日志每一项:

    1. start_or_end为start => 直接入栈
    2. start_or_end为end => 弹出栈顶元素,计算函数经过时间并累加到对应ID的时间上,同时,让此时栈顶元素对应ID的时间减去当前的函数经过时间(如果栈顶有元素的话)

代码

class Solution {
    public int[] exclusiveTime(int n, List<String> logs) {
        LinkedList<MethodLog> stack = new LinkedList<>();
        int[] result = new int[n];
        Arrays.fill(result, 0);
        
        String[] log;
        int id;
        boolean isStart;
        int timeStamp;
        MethodLog top;
        int time;
        for (String s : logs) {
            log = s.split(":");
            id = Integer.parseInt(log[0]);
            isStart = "start".equals(log[1]);
            timeStamp = Integer.parseInt(log[2]);
            if (isStart) {
                stack.push(new MethodLog(id, isStart, timeStamp));
            } else {
                top = stack.pop();
                time = timeStamp - top.timeStamp + 1;
                result[top.id] += time;
                if (!stack.isEmpty()) {
                    result[stack.peek().id] -= time;
                }
            }
        }
        
        return result;
    }
    
    private class MethodLog {
        int id;
        boolean isStart;
        int timeStamp;
        
        MethodLog(int id, boolean isStart, int timeStamp) {
            this.id = id;
            this.isStart = isStart;
            this.timeStamp = timeStamp;
        }
    }
}

相关文章

  • 栈-N636-函数的独占时间

    题目 概述:给定n个函数的运行日志,让你给出每个函数的独占时间独占时间不包括调用其他函数的时间函数可能会被递归调用...

  • Tips:inline 与force_inline

    前期准备 函数入栈和出栈 函数每次入栈都会调用call指令,调用后还需要出栈返回到原来调用的地方。这个时间开销实际...

  • Java虚拟机内存tips

    java虚拟机内存可以分为独占区和共享区。 独占区:虚拟内存栈、本地方法栈、程序计数器。 共享区:方法区、Java...

  • JZ-020-包含 min 函数的栈

    包含 min 函数的栈 题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间...

  • 巧用函数栈实现栈的反转

    一、函数栈 函数的调用过程其实就是一个压栈的过程,在函数栈中,每个函数所占空间成为一个 栈帧。栈帧中保存着函数的形...

  • 21 包含min函数的栈 stack with getmin f

    包含min函数的栈 题目描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复...

  • 剑指offer--让抽象具体化

    题一:【包含min函数的栈】 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂...

  • 宏和函数

    跟函数比较起来,使用宏辉浪费一些空间;(类似内联函数)但是避免了使用函数所必须的压栈、出栈,节省了时间;

  • 函数调用栈平衡

    栈平衡 栈平衡:函数调用前后的栈顶指针指向的位置不变 内平栈 外平栈 内平栈: 指的是在函数调用返回之前使栈保持...

  • 设计包含min函数的栈(微软面试100题002)

    题目: 定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复...

网友评论

      本文标题:栈-N636-函数的独占时间

      本文链接:https://www.haomeiwen.com/subject/voxriqtx.html