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
  • 相关阅读:
    监督学习——决策树理论与实践(上):分类决策树
    监督学习——随机梯度下降算法(sgd)和批梯度下降算法(bgd)
    Protobuf 从入门到实战
    Android 广播机制
    Java 并发编程——volatile/synchronized
    Android 手势识别—缩放
    Jquery 使用和Jquery选择器
    初识jQuery
    正则表达式
    正则表达式
  • 原文地址:https://www.cnblogs.com/immiao0319/p/9035012.html
Copyright © 2011-2022 走看看