zoukankan      html  css  js  c++  java
  • 636. Exclusive Time of Functions 进程的执行时间

    [抄题]:

    Given the running logs of n functions that are executed in a nonpreemptive single threaded CPU, find the exclusive time of these functions.

    Each function has a unique id, start from 0 to n-1. A function may be called recursively or by another function.

    A log is a string has this format : function_id:start_or_end:timestamp. For example, "0:start:0" means function 0 starts from the very beginning of time 0. "0:end:0" means function 0 ends to the very end of time 0.

    Exclusive time of a function is defined as the time spent within this function, the time spent by calling other functions should not be considered as this function's exclusive time. You should return the exclusive time of each function sorted by their function id.

    Example 1:

    Input:
    n = 2
    logs = 
    ["0:start:0",
     "1:start:2",
     "1:end:5",
     "0:end:6"]
    Output:[3, 4]
    Explanation:
    Function 0 starts at time 0, then it executes 2 units of time and reaches the end of time 1. 
    Now function 0 calls function 1, function 1 starts at time 2, executes 4 units of time and end at time 5.
    Function 0 is running again at time 6, and also end at the time 6, thus executes 1 unit of time. 
    So function 0 totally execute 2 + 1 = 3 units of time, and function 1 totally execute 4 units of time.

     [暴力解法]:

    时间分析:

    空间分析:

     [优化后]:

    时间分析:

    空间分析:

    [奇葩输出条件]:

    [奇葩corner case]:

    [思维问题]:

    不知道具体怎么写,感觉stack的题目前就是背 暂时没有发现规律

    [一句话思路]:

    更新数组、更新preTime、更新stack

    [输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

    [画图]:

    [一刷]:

    [二刷]:

    [三刷]:

    [四刷]:

    [五刷]:

      [五分钟肉眼debug的结果]:

    [总结]:

    感觉stack的题目前就是背 暂时没有发现规律

    [复杂度]:Time complexity: O(n) Space complexity: O(n)

    [英文数据结构或算法,为什么不用别的数据结构或算法]:

    涉及到优先顺序的存储结构,一般都是stack

    [算法思想:递归/分治/贪心]:

    [关键模板化代码]:

    [其他解法]:

    [Follow Up]:

    [LC给出的题目变变变]:

     [代码风格] :

    class Solution {
        public int[] exclusiveTime(int n, List<String> logs) {
            //ini: res, split, String[3], prevTime, stack
            Stack<Integer> stack = new Stack<Integer>();
            int[] res = new int[n];
            int prevTime = 0;
            
            //cc
            if (logs == null || logs.size() == 0) return res;
            
            //for loop:
            for (String log : logs) {
                String[] words = log.split(":");
                //update res
                if (!stack.isEmpty()) res[stack.peek()] += Integer.parseInt(words[2]) - prevTime;
                //update prevTime
                prevTime = Integer.parseInt(words[2]);
                //update stack
                if (words[1].equals("start")) stack.push(Integer.parseInt(words[0]));
                else {
                    res[stack.pop()]++;
                    prevTime++;
                }
            }
            
            return res;
        }
    }
    View Code
  • 相关阅读:
    字符串匹配的三种算法
    字符串匹配
    多少个矩形被覆盖
    指针和地址的区别
    股票开盘的最大成交额-----一道不错的贪心算法题目
    Z字形扫描矩阵
    第几次出现
    节日(CCF试题)
    数字排序
    JS对象添加新的字段
  • 原文地址:https://www.cnblogs.com/immiao0319/p/9035012.html
Copyright © 2011-2022 走看看