Teemo tấn công tại các thời điểm trong mảng t (tăng dần). Mỗi tấn công gây độc trong d giây. Tính tổng thời gian bị độc (gộp các khoảng chồng lấn).
Ví dụ: t=[1,4], d=2 → độc [1,2] và [4,5] → tổng 4 giây.
Thuật toán (Gộp khoảng)
- Duyệt các thời điểm tấn công.
- Khoảng độc hiện tại:
[start, end]vớistart=t[i], end=t[i]+d-1. - Nếu
start > currEnd→ cộngend-start+1, cập nhậtcurrEnd=end. - Ngược lại → cộng
end-currEnd(phần mở rộng), cập nhậtcurrEnd=end.
Mã nguồn C++
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int findPoisonedDuration(vector& t, int d) {
int ret=0, currEnd=-1;
for (int start : t) {
int end = start + d - 1;
if (currEnd < start) {
ret += end - start + 1;
currEnd = end;
} else {
ret += end - currEnd;
currEnd = end;
}
}
return ret;
}
};
int main() {
vector v = {1,4};
Solution ob;
cout << ob.findPoisonedDuration(v, 2); // 4
return 0;
}
Đầu vào / Đầu ra
Input: [1,4] 2
Output: 4