Leetcode 之 Exclusive Time of Functions
636. Exclusive Time of Functions
1.Problem
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.
Note:
- Input logs will be sorted by timestamp, NOT log id.
- Your output should be sorted by function id, which means the 0th
element of your output corresponds to the exclusive time of function 0. - Two functions won't start or end at the same time.
- Functions could be called recursively, and will always end.
- 1 <= n <= 100
2.Solution
logs数组中的一条数据代表:functionID + type + timesliceID ,stack中存functionID,因为函数是递归调用的,完全可以用栈来模拟。prev用来标记上一个函数开始执行时的时间片ID(timesliceID)
遍历logs(List),对取出的每一个字符串进行分割成functionID ,type 和 timesliceID
IF type == “start”
IF 栈不空
timesliceID - prev 累加到栈顶元素的执行时间上去。
将functionID 压栈;
更新prev = timesliceID;
ELSE type == “end”
弹栈,取得一个functionID,更新这个functionID的执行时间为 (累加) timesliceID - prev + 1; (为什么 + 1 ,因为 end指令 那一个时间片函数依然再执行,也是函数执行的最后一个时间片)
prev = timesliceID + 1; 同样的道理,这个timeliceID结束后,才开始执行别的函数
3.Code
class Solution {
public int[] exclusiveTime(int n, List<String> logs) {
Stack<Integer> stack = new Stack<>();
//Initialize
int[] res = new int[n];
int prevous = 0;
for ( String s : logs ) {
String[] ss = s.split(":");
if ( ss[1].equals("start") ) {
if ( !stack.empty() ) {
res[stack.peek()] += Integer.parseInt(ss[2]) - prevous;
}
stack.push(Integer.parseInt(ss[0]));
prevous = Integer.parseInt(ss[2]);
} else {
res[Integer.parseInt(ss[0])] += Integer.parseInt(ss[2]) - prevous + 1;
stack.pop();
prevous = Integer.parseInt(ss[2]) + 1;
}
}
return res;
}
}
4.提交Leetcode的代码

Leetcode 之 Exclusive Time of Functions的更多相关文章
- [LeetCode] 636. Exclusive Time of Functions 函数的独家时间
Given the running logs of n functions that are executed in a nonpreemptive single threaded CPU, find ...
- [leetcode]636. Exclusive Time of Functions函数独占时间
Given the running logs of n functions that are executed in a nonpreemptive single threaded CPU, find ...
- [LeetCode] Exclusive Time of Functions 函数的独家时间
Given the running logs of n functions that are executed in a nonpreemptive single threaded CPU, find ...
- 【LeetCode】636. Exclusive Time of Functions 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 栈 日期 题目地址:https://leetcode ...
- 【leetcode】636. Exclusive Time of Functions
题目如下: 解题思路:本题和括号匹配问题有点像,用栈比较适合.一个元素入栈前,如果自己的状态是“start”,则直接入栈:如果是end则判断和栈顶的元素是否id相同并且状态是“start”,如果满足这 ...
- [Swift]LeetCode636. 函数的独占时间 | Exclusive Time of Functions
Given the running logs of n functions that are executed in a nonpreemptive single threaded CPU, find ...
- 636. Exclusive Time of Functions 进程的执行时间
[抄题]: Given the running logs of n functions that are executed in a nonpreemptive single threaded CPU ...
- Exclusive Time of Functions
On a single threaded CPU, we execute some functions. Each function has a unique id between 0 and N- ...
- 模拟函数调用 Simulation Exclusive Time of Functions
2018-04-28 14:10:33 问题描述: 问题求解: 个人觉得这是一条很好的模拟题,题目大意就是给了一个单线程的处理器,在处理器上跑一个函数,但是函数里存在调用关系,可以是调用其他函数,也可 ...
随机推荐
- ERROR C2676
直接上代码: nl.h #ifndef NL_H #define NL_H #include <iosfwd> namespace ZJ { /** Insert a newline ch ...
- c# 遇到的问题,求解?
c# cannot evaluate expression because the code of the current method is optimized.
- 如何在Openwrt上,针对内核创建自定义Patch?
参考资料: 1.http://wiki.openwrt.org/doc/devel/patches?s[]=quilt --- 官方对于如何打Patch的说明 2.http://blog.csdn ...
- [转]Spark能否取代Hadoop?
大数据的浪潮风靡全球的时候,Spark火了.在国外 Yahoo!.Twitter.Intel.Amazon.Cloudera 等公司率先应用并推广 Spark 技术,在国内阿里巴巴.百度.淘宝.腾讯. ...
- 【每一个人都是梵高】A Neural Algorithm of Artistic Style
文章地址:A Neural Algorithm of Artistic Style 代码:https://github.com/jcjohnson/neural-style 这篇文章我认为可以起个浪漫 ...
- Squares - poj 2002(hash)
枚举两个点作为一条边,求出正方形的另外两个点,利用hash查找另外两个点. #include<stdio.h> #include<string.h> #include<s ...
- 【实验二】Spring框架笔记——NamedParameterJdbcTemplate与具名参数
在经典的 JDBC 用法中, SQL 参数是用占位符 ? 表示,并且受到位置的限制. 定位参数的问题在于, 一旦参数的顺序发生变化, 就必须改变参数绑定. 在 Spring JDBC 框架中, 绑定 ...
- python 学习笔记 if语句
一.if语句的格式 语句块必须有相同的缩进. 语句块必须比if,elif,else多一层缩进 # 如果条件成立则执行语句块1, # 否则 如果条件2成立则执行语句块2 # 其他情况执行语句块3 # e ...
- petrozavodsk summer 2018 游记&&总结
day0: 出发前训了一场比较水bapc2017保持手感(恢复信心),成功AK了,不过罚时略高.然后三人打车从紫金港到杭州东站,坐高铁到上海虹桥,再坐机场快线到浦东机场(傻乎乎的jsb帮爸爸付了钱,然 ...
- ChemDraw Pro移动原子有什么方法
很多的用户朋友在使用ChemDraw Pro 14过程中,会发现我们用[文本]工具在我们绘制的化学结构上建立原子符号和说明时一些标记的原子名称会显得拥挤,这个时候我们可以通过移动原子的方式来把空间放大 ...