52
52
53
53
<!-- 这里可写通用的实现逻辑 -->
54
54
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
+
55
63
<!-- tabs:start -->
56
64
57
65
### ** Python3**
61
69
``` python
62
70
class Solution :
63
71
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
68
76
```
69
77
70
78
### ** Java**
@@ -74,11 +82,12 @@ class Solution:
74
82
``` java
75
83
class Solution {
76
84
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 ]);
80
89
}
81
- return res ;
90
+ return ans ;
82
91
}
83
92
}
84
93
```
@@ -89,24 +98,25 @@ class Solution {
89
98
class Solution {
90
99
public:
91
100
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] );
95
105
}
96
- return res ;
106
+ return ans ;
97
107
}
98
108
};
99
109
```
100
110
101
111
### **Go**
102
112
103
113
```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])
108
118
}
109
- return res
119
+ return
110
120
}
111
121
112
122
func min(a, b int) int {
@@ -117,6 +127,21 @@ func min(a, b int) int {
117
127
}
118
128
```
119
129
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
+
120
145
### ** ...**
121
146
122
147
```
0 commit comments