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
  • 相关阅读:
    《大话数据结构》第1章 数据结构绪论 1.2 你数据结构怎么学的?
    伍迷七八月新浪微博集锦
    《大话数据结构》第9章 排序 9.7 堆排序(下)
    《大话数据结构》第3章 线性表 3.8.2 单链表的删除
    《大话数据结构》第9章 排序 9.5 直接插入排序
    《大话数据结构》第9章 排序 9.8 归并排序(上)
    《大话数据结构》第2章 算法基础 2.9 算法的时间复杂度
    《大话数据结构》第1章 数据结构绪论 1.1 开场白
    《大话数据结构》第9章 排序 9.1 开场白
    [AWS] Assign a public IP address to an EC2 instance after launched
  • 原文地址:https://www.cnblogs.com/immiao0319/p/9035012.html
Copyright © 2011-2022 走看看