[抄题]:

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;
}
}

最新文章

  1. SqlDataReader和SqlDataAdapter
  2. NSFetchedResultsControllerDelegate不执行
  3. TOMCAT如何建立两个端口或服务
  4. atitit.mp4&#160;视频文件多媒体格式结构详解
  5. 用Javascript弹出div定义的消息框并往块里面填写文字
  6. 【解决方案】: hyper-v 导入虚拟机报这个错误 32784
  7. 怎样查看Tomcat动态控制台信息
  8. pdf.js在国际化的时候,显示不了中文的解决办法
  9. hdu-2639 Bone Collector II---第k大背包
  10. App上架应用市场,如何攻破安全过检难题
  11. 基于 Docker 的微服务架构实践
  12. 关于感受野 (Receptive field) 你该知道的事
  13. Quartz基础+实例
  14. SharePoint每日小贴士Web部件
  15. MySQL索引底层实现原理
  16. vue全家桶+Koa2开发笔记(3)--mongodb
  17. hdu 1716 排列
  18. LinkedList ArrayList 比较
  19. windows rails new demo时候出错Make sure that `gem install mysql2 -v &#39;0.3.15&#39;` succeeds before bundling.
  20. Golang之反射(重点!!)

热门文章

  1. Docker生态概览
  2. Arrays--codility
  3. Linux服务器运维安全策略经验分享
  4. Asp.net Mvc 过滤器执行顺序
  5. erlang学习之自定义behaviour
  6. GDB调试字符数组时指针和数组区别的体现
  7. HttpURLConnection的使用步骤
  8. 【学步者日记】C#使用线程
  9. [置顶] ubuntu版本很老,apt-get update更新失败时(W: Failed to fetch ...)------如何创建新的sources.list
  10. 使用mysql-connector-java出现的错误