文章目录
- 1.题目再现
- 2.思路分析&&示例说明
- 2.1第一个示例
- 2.2第二个示例
- 3.代码解释
1.题目再现
这个题目的名字叫做提莫攻击,如果是玩游戏的小伙伴对于这个场景就很熟悉了;
这个实际上是说:已知的条件会给我们一个数组,在不同的时刻,也就是这个数组里面的不同的位置,会被攻击,这个时候就会处于中毒的状态,然后我们需要根据这个题目给定的数组和中毒的时刻,判断这个总共的中毒的时间;
2.思路分析&&示例说明
2.1第一个示例
下面的这个就是题目给定的第一个示例:我来说一下这样的题目应该如何进行分析,我们遵循从易到难的思路;
他的这个数组里面是两个元素,我们可以把这个补全,什么叫做补全?
就是我们写 1 2 3 4 这样全部写出来;
这个时候的1,4相当于在这个1,4位置会受到攻击,攻击之后就会中毒,这个时候的持续时间是2,因此,题目上面说了,这四个数据里面,第一个位置和第四个位置会中毒,也就是数组里面的1 4,1开始中毒,持续时间2秒,也就是经过了1到2,2到3的过程,至此,第一段的中毒时间结束;
接着到4的时候,再次中毒,这个时候持续的时间是2,也就是4到5,5到6;
综合上面的分析,一共的中毒的时间就是4,即1到2,2到3,4到5,5到6,这个就是对于给定的第一个案例的解释
2.2第二个示例
下面的是给定的第二个示例:
这个地方我提示一下,之所以给出来第二个示例,就是因为他和第一个有区别,如果两个题目的思路是完全一样的,这个时候就没有给出来的必要了;
它的特殊之处就在于他是第一秒的时候开始中毒,中毒的时间是两秒,本来应该是1到2,2到3,但是这个时候题目里面说了,2的时候有中毒了,注意这个是新的过程,因此1开始的那一次中毒只会持续1秒钟,2的时候就会开始新一轮的中毒,持续的时间是2秒;
综上所述,这个过程里面的持续的时间就是3秒钟;
3.代码解释
上面的两个例子更多的是在总结思路和方法,接下来的代码就是对于上面的思路的一个凝练和高度概括;
显然,我们发现,需要使用数组里面的前一个数字和后一个数字的差和我们的duration(即中毒的持续的时间)进行比较,如果差值大,这个时候就是完全中毒药,不会出现交叉;
如果这个duration大,也就是这一轮没结束的时候,新一轮的这个中毒就开始了,这个时候就需要加上的时两个的差值,而不是这个duration了;
例如1 2 duration=2,这个时候1开始的时候加上的中毒时间应该是2-1的差值,而不是这个duration,因为这个2没过完,新一轮的中毒又开始了;
在下面的这个代码里面,我们使用这个ret不断对于这个过程里面的中毒的时间进行统计,最后作为返回值就可以了;