- 921. Minimum Add to Make Parentheses Valid 使括号有效的最少添加
- 915. Partition Array into Disjoint Intervals 分割数组
- 932. Beautiful Array 漂亮数组
- 940. Distinct Subsequences II 不同的子序列 II
题目地址:https://leetcode.com/problems/exclusive-time-of-functions/description/
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.
Alog 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:
1、 Inputlogswillbesortedbytimestamp,NOTlogid.;
2、 Youroutputshouldbesortedbyfunctionid,whichmeansthe0thelementofyouroutputcorrespondstotheexclusivetimeoffunction0.;
3、 Twofunctionswon'tstartorendatthesametime.;
4、 Functionscouldbecalledrecursively,andwillalwaysend.;
5、 1<=n<=100;
求一个函数调用栈中各个函数各自的执行时间。这是个不能争夺资源的系统,同时只能运行一个函数。
给的数据包括函数的数量,以及各自的调用和结束的时间。
需要注意的是,开始时间是在时间片的开头,结束时间是在时间片的结尾。
这个题很好想到思路使用栈,因为我们已经知道了操作系统里面的函数调用确实就是用栈实现的。
因为同时只能运行一个函数,所以就是一个后进先出的栈。给出的调用日志一定会满足我们说的栈的条件的。
下面的解析应该能看明白。
首先要弄明白一点:当遍历到logs中的某个字符串时,无论它是begin还是end,当前位于栈顶的元素都会占用 “当前字符串的timePoint-之前字符串的timePoint”(或+1) 时间。
因为如果当前遍历到的字符串是start,那么栈顶元素就是之前start了还没结束的function,在 当前时间点 和 上一个时间点 之间的这段时间,是被栈顶元素占用的,占用了 “当前字符串的timePoint-之前字符串的timePoint” 时间。
如果当前遍历到的字符串是end,那么栈顶元素就是 当前字符串的function (前面一个字符串刚push进了该function的start) ,那么在 当前时间点 和 上一个时间点 之间的这段时间,也肯定是被栈顶元素占用的,占用 “当前字符串的timePoint-之前字符串的timePoint +1 ” 时间 (比之前多加了一个end时间点)。
举个例子来说明:
functionId: 0 1 2 2 1 0
begin/end: { { { } } }
timeItem: 0 1 2 3 4 5
0被push进栈后,接下来遍历到 1 start 1,那么 0~1 的时间是被栈顶元素 0 占用的。接下来 1 被push进栈,遍历到 2 start 2,那么 1~2 的时间是被栈顶元素 1 占用的。接下来 2 被push进栈,遍历到 2 end 3,那么 2~3 的时间是被栈顶元素 2 占用的。接下来pop出 2 ,遍历到 1 end 4,那么3~4的时间是栈顶元素 1 占用的。接下来pop出 1 ,遍历到 0 end 5,那么 4~5 的时间是栈顶元素 0 占用的。
所以算法的关键在于:拿到上一个log的 start/stop time 设为prev,再拿到当前 log 的 start/stop time ,计算出两个time之间的时间差。注意prevTime表示的是当前这个操作结束之后的这一秒的开始时间,即如果是start那么就是这秒的开始时间,如果是end那么就是下一秒的开始时间。
摘自:http://blog.csdn.net/huanghanqian/article/details/77160234
class Solution(object):
def exclusiveTime(self, n, logs):
"""
:type n: int
:type logs: List[str]
:rtype: List[int]
"""
res = [0] * n
stack = []
prevTime = 0
for log in logs:
idx, type, time = log.split(':')
if type == 'start':
if stack:
res[stack[-1]] += int(time) - prevTime
stack.append(int(idx))
prevTime = int(time)
else:
res[stack[-1]] += int(time) - prevTime + 1
stack.pop()
prevTime = int(time) + 1
return res
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
DDKK.COM 弟弟快看-教程,程序员编程资料站,版权归原作者所有
本文经作者:负雪明烛 授权发布,任何组织或个人未经作者授权不得转发
我正在尝试实现一种“独占消费者”或“独占队列”,以避免最终用户必须固定任何内容:代理将选择一个消息消费者来获取队列的所有消息,以确保排序,如果该消费者失败,代理将自动故障转移并选择另一个消费者。 我想
我想从多行文本字段中排除特定模式。我有一个捕获该模式的正则表达式,所以现在我想创建一个匹配除该模式之外的所有内容的表达式。对此的一般方法是什么?出于某种原因,像这样的负面前瞻:^(.(?!expres
这是我的view.jsp。当我单击 view.jsp 上的超链接时,我想在弹出窗口中显示 jpop.jsp 页面?谁能告诉我这可能吗?我是 liferay 的新手。我在 LiferayWindowSt
我想从多行文本字段中排除特定模式。我有一个捕获该模式的正则表达式,所以现在我想创建一个匹配除该模式之外的所有内容的表达式。对此的一般方法是什么?出于某种原因,像这样的负面前瞻:^(.(?!expres
我正在使用一组 jQuery 选择器在多个不同的页面上插入一些内容;然而,有些页面具有多个选择器,因此内容会在页面上插入多次。例如: $('div.rColInnerL:first, div.box3
我们正在维护一个使用 DirectDraw 的全屏 256 色图形模式的旧视频游戏。问题是,某些在后台运行的应用程序有时会在游戏运行时尝试更改系统调色板,从而导致图形损坏。 我们可以(有时)通过处理
我有一个现有的应用程序,它在数据库中有以下实体 客户 发票组 销售组 一个客户可以属于多个组。目前这是按以下方式映射的 Customer table - cid (Pk) - fname - s
我想知道您是否可以以一种只有特定的其他方法 B 才能调用 A 的方式声明方法 A。 蜂鸣的原因是我想限制一种方法从 main 调用蜂鸣(因为在大学里有奇怪的测试算法)。如果 main 调用了这个方法(
我目前正在使用 Ruby 编写 Ruby 解析器,更准确地说是使用 Parslet,因为我认为它比 Treetop 或 Citrus 更容易使用。我使用官方规范创建我的规则,但有些语句我无法编写,因为
SQL Fiddle 在这里:http://sqlfiddle.com/#!2/a2e41/8 我有一个查询执行多项检查:列 uidto 或 uidfrom 是否包含给定值。这工作正常,但只要我想排除
我正试图找到用 C 语言编写 XNOR 门的最有效方法。 if(VAL1 XNOR VAL2) { BLOCK; } 有什么建议吗? 谢谢。 最佳答案 有两个操作数,这很简单: if (val
来自 API 的信息非常稀少 - 还考虑到 Thread.critical 似乎没有记录。 Wraps a block in Thread.critical, restoring the origin
题目地址:https://leetcode.com/problems/exclusive-time-of-functions/description/ 题目描述 Given the running
例如:按 userid, sdate, edate 索引 userid sdate edate 001 2019-01-01 2019-01-30 如果我像这样插入新数据: u
我们使用的是 sonarqube 5.1.1,通常“应用项目排除”步骤非常非常慢。有时在 1-2.5 小时的范围内。 我们有“全局源文件排除”来排除 2 种模式:**/swagger-ui/****/
我在 symfony 项目上工作,我想从 中排除一些生成的代码 Sonar 分析 . 我想排除一个以此路径命名的文件夹: src/应用程序/奏鸣曲 . 我尝试了许多 Sonar 排除的可能性,但徒劳无
这个问题已经有答案了: Combine whitelist and blacklist in java regex expression (3 个回答) 已关闭 7 年前。 我想匹配 a 和 z 之间
我知道排除单词的正则表达式,无论如何,它应该是 (!?wordToIgnore|wordToIgnore2|wordToIgnore3) 但我有一个现有的、复杂的正则表达式,我需要将其添加,但我对如何
我正在尝试为“Little book of Semaphores”中的“Exclusive Queue”问题编写一个解决方案。问题表述如下: 想象一下,线程代表舞厅舞者,两种舞者(领导者和追随者)在进
我正在我们的软件中配置 Maven,它运行得非常好。我有一些细节需要修复,但它们没有按照我想要的方式工作,我需要知道我能做什么。具体来说,我们都使用 Eclipse,并且在之前的配置(没有 Maven
我是一名优秀的程序员,十分优秀!