【8】leetcode note

博客探讨了在处理函数的独占时间计算时遇到的复杂情况,包括进程挂起、递归等。主要思路是使用栈来跟踪开始和结束时间戳,但关键在于如何处理栈中元素的时间记忆。在栈非空时,需要减去已计算的时间来得到准确的函数执行时间。博客总结了两种典型场景,并给出了相应的计算方法。
摘要由CSDN通过智能技术生成

题目:

636. 函数的独占时间

个人总结


636. 函数的独占时间

题目略

这道题的基本思路也是十分的明确的,就是计算同一个functionid的开始和结束的timestamp从而得出该进程的计算时间。

因为一个start对应一个end,所以就会想到使用栈将start的log入栈,直到遇到end才出栈,并计算对应的消耗时间。

上述思路对于一个做完才做另一个的话就已经可以实现的。但是实际的情况远远没有如此简单。会有很多种情况。个人总结以下几种:

(1)存在两个进程,进程一未结束挂起,执行进程二,进程二结束,进程一结束

(2)存在两个进程,进程一开始,某个时间段进程一递归,结束后执行进程二,进程二结束再最后执行进程一。

上述的两张情况,最大的难度点在于如何去“记忆”时间。

第一种情况就是:

进程二消耗时间 = 进程二结束时间 - 进程二开始时间

进程一消耗时间 = 进程一结束时间 - 进程一开始时间 - 进程二消耗时间

第二种情况就是:

进程二消耗时间 = 进程二结束 - 进程二开始

进程一消耗时间 = 第一次结束 - 第一次开始 - (第二次结束 - 第二次开始) - 进程二消耗

所以综上所述,当栈不为空时,应当减取对应得值才能获取对应得时间。

换另一个思路来说,就是说当栈不为空时,那么后面出现得值应该减取当前栈计算过得和。

此题在将对应得log入栈以后,如何去记录这个 “计算过的和” 就成了一个难点了。

最简单的操作应该是判断栈是否为空,如果不为空,将计算过的值添加到栈顶去。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>