题目:
个人总结
题目略
这道题的基本思路也是十分的明确的,就是计算同一个functionid的开始和结束的timestamp从而得出该进程的计算时间。
因为一个start对应一个end,所以就会想到使用栈将start的log入栈,直到遇到end才出栈,并计算对应的消耗时间。
上述思路对于一个做完才做另一个的话就已经可以实现的。但是实际的情况远远没有如此简单。会有很多种情况。个人总结以下几种:
(1)存在两个进程,进程一未结束挂起,执行进程二,进程二结束,进程一结束
(2)存在两个进程,进程一开始,某个时间段进程一递归,结束后执行进程二,进程二结束再最后执行进程一。
上述的两张情况,最大的难度点在于如何去“记忆”时间。
第一种情况就是:
进程二消耗时间 = 进程二结束时间 - 进程二开始时间
进程一消耗时间 = 进程一结束时间 - 进程一开始时间 - 进程二消耗时间
第二种情况就是:
进程二消耗时间 = 进程二结束 - 进程二开始
进程一消耗时间 = 第一次结束 - 第一次开始 - (第二次结束 - 第二次开始) - 进程二消耗
所以综上所述,当栈不为空时,应当减取对应得值才能获取对应得时间。
换另一个思路来说,就是说当栈不为空时,那么后面出现得值应该减取当前栈计算过得和。
此题在将对应得log入栈以后,如何去记录这个 “计算过的和” 就成了一个难点了。
最简单的操作应该是判断栈是否为空,如果不为空,将计算过的值添加到栈顶去。