Skip to content

Commit 23bc2d9

Browse files
committed
feat: add solutions to lc problem: No.0495
No.0495.Teemo Attacking
1 parent cd209cc commit 23bc2d9

File tree

7 files changed

+105
-51
lines changed

7 files changed

+105
-51
lines changed

solution/0400-0499/0495.Teemo Attacking/README.md

+42-17
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,14 @@
5252

5353
<!-- 这里可写通用的实现逻辑 -->
5454

55+
**方法一:一次遍历**
56+
57+
我们先考虑最后一次攻击,此次攻击一定可以使得艾希处于中毒状态,所以总中毒时间至少为 `duration`
58+
59+
接下来,我们考虑前 $n-1$ 次攻击,每一次攻击的中毒持续时间为 $min(duration, timeSeries[i] - timeSeries[i-1])$,其中 $i$ 从 1 开始。我们将这些中毒持续时间累加起来,即为总中毒时间。
60+
61+
时间复杂度 $O(n)$,空间复杂度 $O(1)$。其中 $n$ 为数组 `timeSeries` 的长度。
62+
5563
<!-- tabs:start -->
5664

5765
### **Python3**
@@ -61,10 +69,10 @@
6169
```python
6270
class Solution:
6371
def findPoisonedDuration(self, timeSeries: List[int], duration: int) -> int:
64-
n, res = len(timeSeries), duration
65-
for i in range(n - 1):
66-
res += min(duration, timeSeries[i + 1] - timeSeries[i])
67-
return res
72+
ans = duration
73+
for a, b in pairwise(timeSeries):
74+
ans += min(duration, b - a)
75+
return ans
6876
```
6977

7078
### **Java**
@@ -74,11 +82,12 @@ class Solution:
7482
```java
7583
class Solution {
7684
public int findPoisonedDuration(int[] timeSeries, int duration) {
77-
int n = timeSeries.length, res = duration;
78-
for (int i = 0; i < n - 1; ++i) {
79-
res += Math.min(duration, timeSeries[i + 1] - timeSeries[i]);
85+
int n = timeSeries.length;
86+
int ans = duration;
87+
for (int i = 1; i < n; ++i) {
88+
ans += Math.min(duration, timeSeries[i] - timeSeries[i - 1]);
8089
}
81-
return res;
90+
return ans;
8291
}
8392
}
8493
```
@@ -89,24 +98,25 @@ class Solution {
8998
class Solution {
9099
public:
91100
int findPoisonedDuration(vector<int>& timeSeries, int duration) {
92-
int n = timeSeries.size(), res = duration;
93-
for (int i = 0; i < n - 1; ++i) {
94-
res += min(duration, timeSeries[i + 1] - timeSeries[i]);
101+
int ans = duration;
102+
int n = timeSeries.size();
103+
for (int i = 1; i < n; ++i) {
104+
ans += min(duration, timeSeries[i] - timeSeries[i - 1]);
95105
}
96-
return res;
106+
return ans;
97107
}
98108
};
99109
```
100110
101111
### **Go**
102112
103113
```go
104-
func findPoisonedDuration(timeSeries []int, duration int) int {
105-
n, res := len(timeSeries), duration
106-
for i := 0; i < n-1; i++ {
107-
res += min(duration, timeSeries[i+1]-timeSeries[i])
114+
func findPoisonedDuration(timeSeries []int, duration int) (ans int) {
115+
ans = duration
116+
for i, x := range timeSeries[1:] {
117+
ans += min(duration, x-timeSeries[i])
108118
}
109-
return res
119+
return
110120
}
111121
112122
func min(a, b int) int {
@@ -117,6 +127,21 @@ func min(a, b int) int {
117127
}
118128
```
119129

130+
### **C#**
131+
132+
```cs
133+
public class Solution {
134+
public int FindPoisonedDuration(int[] timeSeries, int duration) {
135+
int ans = duration;
136+
int n = timeSeries.Length;
137+
for (int i = 1; i < n; ++i) {
138+
ans += Math.Min(duration, timeSeries[i] - timeSeries[i - 1]);
139+
}
140+
return ans;
141+
}
142+
}
143+
```
144+
120145
### **...**
121146

122147
```

solution/0400-0499/0495.Teemo Attacking/README_EN.md

+34-17
Original file line numberDiff line numberDiff line change
@@ -50,22 +50,23 @@ Ashe is poisoned for seconds 1, 2, and 3, which is 3 seconds in total.</pre>
5050
```python
5151
class Solution:
5252
def findPoisonedDuration(self, timeSeries: List[int], duration: int) -> int:
53-
n, res = len(timeSeries), duration
54-
for i in range(n - 1):
55-
res += min(duration, timeSeries[i + 1] - timeSeries[i])
56-
return res
53+
ans = duration
54+
for a, b in pairwise(timeSeries):
55+
ans += min(duration, b - a)
56+
return ans
5757
```
5858

5959
### **Java**
6060

6161
```java
6262
class Solution {
6363
public int findPoisonedDuration(int[] timeSeries, int duration) {
64-
int n = timeSeries.length, res = duration;
65-
for (int i = 0; i < n - 1; ++i) {
66-
res += Math.min(duration, timeSeries[i + 1] - timeSeries[i]);
64+
int n = timeSeries.length;
65+
int ans = duration;
66+
for (int i = 1; i < n; ++i) {
67+
ans += Math.min(duration, timeSeries[i] - timeSeries[i - 1]);
6768
}
68-
return res;
69+
return ans;
6970
}
7071
}
7172
```
@@ -76,24 +77,25 @@ class Solution {
7677
class Solution {
7778
public:
7879
int findPoisonedDuration(vector<int>& timeSeries, int duration) {
79-
int n = timeSeries.size(), res = duration;
80-
for (int i = 0; i < n - 1; ++i) {
81-
res += min(duration, timeSeries[i + 1] - timeSeries[i]);
80+
int ans = duration;
81+
int n = timeSeries.size();
82+
for (int i = 1; i < n; ++i) {
83+
ans += min(duration, timeSeries[i] - timeSeries[i - 1]);
8284
}
83-
return res;
85+
return ans;
8486
}
8587
};
8688
```
8789
8890
### **Go**
8991
9092
```go
91-
func findPoisonedDuration(timeSeries []int, duration int) int {
92-
n, res := len(timeSeries), duration
93-
for i := 0; i < n-1; i++ {
94-
res += min(duration, timeSeries[i+1]-timeSeries[i])
93+
func findPoisonedDuration(timeSeries []int, duration int) (ans int) {
94+
ans = duration
95+
for i, x := range timeSeries[1:] {
96+
ans += min(duration, x-timeSeries[i])
9597
}
96-
return res
98+
return
9799
}
98100
99101
func min(a, b int) int {
@@ -104,6 +106,21 @@ func min(a, b int) int {
104106
}
105107
```
106108

109+
### **C#**
110+
111+
```cs
112+
public class Solution {
113+
public int FindPoisonedDuration(int[] timeSeries, int duration) {
114+
int ans = duration;
115+
int n = timeSeries.Length;
116+
for (int i = 1; i < n; ++i) {
117+
ans += Math.Min(duration, timeSeries[i] - timeSeries[i - 1]);
118+
}
119+
return ans;
120+
}
121+
}
122+
```
123+
107124
### **...**
108125

109126
```
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
class Solution {
22
public:
33
int findPoisonedDuration(vector<int>& timeSeries, int duration) {
4-
int n = timeSeries.size(), res = duration;
5-
for (int i = 0; i < n - 1; ++i) {
6-
res += min(duration, timeSeries[i + 1] - timeSeries[i]);
4+
int ans = duration;
5+
int n = timeSeries.size();
6+
for (int i = 1; i < n; ++i) {
7+
ans += min(duration, timeSeries[i] - timeSeries[i - 1]);
78
}
8-
return res;
9+
return ans;
910
}
1011
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
public class Solution {
2+
public int FindPoisonedDuration(int[] timeSeries, int duration) {
3+
int ans = duration;
4+
int n = timeSeries.Length;
5+
for (int i = 1; i < n; ++i) {
6+
ans += Math.Min(duration, timeSeries[i] - timeSeries[i - 1]);
7+
}
8+
return ans;
9+
}
10+
}

solution/0400-0499/0495.Teemo Attacking/Solution.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
func findPoisonedDuration(timeSeries []int, duration int) int {
2-
n, res := len(timeSeries), duration
3-
for i := 0; i < n-1; i++ {
4-
res += min(duration, timeSeries[i+1]-timeSeries[i])
1+
func findPoisonedDuration(timeSeries []int, duration int) (ans int) {
2+
ans = duration
3+
for i, x := range timeSeries[1:] {
4+
ans += min(duration, x-timeSeries[i])
55
}
6-
return res
6+
return
77
}
88

99
func min(a, b int) int {
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
class Solution {
22
public int findPoisonedDuration(int[] timeSeries, int duration) {
3-
int n = timeSeries.length, res = duration;
4-
for (int i = 0; i < n - 1; ++i) {
5-
res += Math.min(duration, timeSeries[i + 1] - timeSeries[i]);
3+
int n = timeSeries.length;
4+
int ans = duration;
5+
for (int i = 1; i < n; ++i) {
6+
ans += Math.min(duration, timeSeries[i] - timeSeries[i - 1]);
67
}
7-
return res;
8+
return ans;
89
}
910
}
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
class Solution:
22
def findPoisonedDuration(self, timeSeries: List[int], duration: int) -> int:
3-
n, res = len(timeSeries), duration
4-
for i in range(n - 1):
5-
res += min(duration, timeSeries[i + 1] - timeSeries[i])
6-
return res
3+
ans = duration
4+
for a, b in pairwise(timeSeries):
5+
ans += min(duration, b - a)
6+
return ans

0 commit comments

Comments
 (0)