題目連結(jié):
題目意譯:
我們的英雄提摩正在用毒攻擊敵人艾希!當(dāng)提摩攻擊艾希,艾希將中毒恰好 duration 秒。更正式地說(shuō),一個(gè) t 秒的攻擊將代表著艾希會(huì)在時(shí)間區(qū)間 [t, t + duration - 1] 之中維持著中毒。如果提摩在毒的效果結(jié)束前再次攻擊,則計(jì)時(shí)器將會(huì)重設(shè),而毒的效果將結(jié)束於新的攻擊的 duration 秒後。
你被給定一個(gè)非遞減整數(shù)陣列 timeSeries ,其中 timeSeries[i] 代表提摩於第 timeSeries[i] 時(shí)攻擊了艾希,以及給定一個(gè)整數(shù) duration。
回傳艾希中毒的總秒數(shù)。
限制:
1 ≦ timeSeries.length ≦ 10 ^ 4
0 ≦ timeSeries[i] 、 duration ≦ 10 ^ 7
timeSeries 以非遞減的順序排序。
範(fàn)例測(cè)資:
範(fàn)例 1:
輸入: timeSeries = [1,4], duration = 2
輸出: 4
解釋: 提摩對(duì)於艾希之攻擊如下:
- 在第 1 秒,提摩攻擊,而艾希將中毒於第 1 秒和第 2 秒。
- 在第 4 秒,提摩攻擊,而艾希將中毒於第 4 秒和第 5 秒。
艾希中毒於第 1 、 2 、 4 、 5 秒,因此總共 4 秒。
範(fàn)例 2:
輸入: timeSeries = [1,2], duration = 2
輸出: 3
解釋: 提摩對(duì)於艾希之攻擊如下:
- 在第 1 秒,提摩攻擊,而艾希將中毒於第 1 秒和第 2 秒。
- 不過(guò)在第 2 秒,提摩再次攻擊並重設(shè)了中毒計(jì)時(shí)器。而艾希將中毒於第 2 秒和第 3 秒。
艾希中毒於第 1 、 2 、 3 秒,因此總共 3 秒。
解題思維:
單純地模擬出提摩每次攻擊所造成的中毒區(qū)間。利用兩個(gè)變數(shù) B 、 E,用來(lái)儲(chǔ)存中毒時(shí)間區(qū)間的開(kāi)頭以及結(jié)尾時(shí)間點(diǎn)。
對(duì)於每次第 t 秒的攻擊,先看前一次的結(jié)尾 E(如果有前一次攻擊的話)是否 ≦ t。
如果是就代表著,此次攻擊與先前的攻擊獨(dú)立,因此將會(huì)有新的中毒區(qū)間 [t, t + duration - 1],而先前攻擊的將貢獻(xiàn) E - B + 1 秒的中毒時(shí)間。接著將 B 設(shè)為 t 、 E 設(shè)為 t + duration - 1 。
反之,就代表本次的攻擊將會(huì)重設(shè)先前的時(shí)間計(jì)數(shù)器,因此我們需要更新中毒區(qū)間的結(jié)尾 E 為 t + duration - 1 (注意區(qū)間開(kāi)頭時(shí)間點(diǎn) B 的值沒(méi)有更動(dòng))。
最後上述過(guò)程中的中毒總秒數(shù) + (最後的 E 值 - 最後的 B 值 + 1)(因?yàn)楣馐巧厦娴倪^(guò)程,最後一次攻擊將不會(huì)被納入秒數(shù)中)即是所求。
此次分享到此為止,如有任何更加簡(jiǎn)潔的想法或是有說(shuō)明不清楚之地方,也煩請(qǐng)各位大大撥冗討論。