#495
Teemo Attacking
EasyArraySimulationArraySimulation
Approaches
Brute ForceOptimal
Complexity Comparison
| Brute Force | Optimal Solution★ | |
|---|---|---|
| Time | O(n²) | O(n) |
| Space | O(n) | O(1) |
💡
Intuition
Time O(n)Space O(1)
The optimal approach leverages the fact that we can track the end of the poison effect without needing to store every second. We only need to check if the next attack overlaps with the current poison duration.
⚙️
Algorithm
4 steps- 1Step 1: Initialize a variable to track total poisoned time and another to track the end of the current poison effect.
- 2Step 2: Iterate through the timeSeries. For each attack, check if it overlaps with the current poison effect.
- 3Step 3: If it overlaps, only add the additional poisoned time. If it doesn't overlap, add the full duration.
- 4Step 4: Update the end of the poison effect after each attack.
solution.py12 lines
1# Full working Python code
2
3def totalPoisonedTime(timeSeries, duration):
4 total_time = 0
5 poison_end = 0
6 for attack_time in timeSeries:
7 if attack_time < poison_end:
8 total_time += attack_time + duration - poison_end
9 else:
10 total_time += duration
11 poison_end = attack_time + duration
12 return total_timeℹ
Complexity note: This complexity is linear because we only make a single pass through the timeSeries array, performing constant-time operations for each attack.
- 1Understanding the overlap of poison durations is crucial for optimizing the solution.
- 2Using a set to track unique seconds can be inefficient; instead, track the total time directly.
Solutions and explanations are original Tejav content. Problem titles © LeetCode — use the LeetCode button above for the full problem statement.