44
44
45
45
<!-- 这里可写通用的实现逻辑 -->
46
46
47
+ ** 方法一:模拟**
48
+
49
+ 我们用一个变量 $s$ 记录数组 $nums$ 中所有偶数的和。
50
+
51
+ 对于每次查询 $(v, i)$:
52
+
53
+ 我们先判断 $nums[ i] $ 是否为偶数,若 $nums[ i] $ 为偶数,则将 $s$ 减去 $nums[ i] $;然后将 $nums[ i] $ 加上 $v$;
54
+
55
+ 若 $nums[ i] $ 为偶数,则将 $s$ 加上 $nums[ i] $,然后将 $s$ 加入答案数组。
56
+
57
+ 时间复杂度 $O(n + m)$,其中 $n$ 和 $m$ 分别为数组 $nums$ 和 $queries$ 的长度。忽略答案数组的空间消耗,空间复杂度 $O(1)$。
58
+
47
59
<!-- tabs:start -->
48
60
49
61
### ** Python3**
@@ -55,17 +67,14 @@ class Solution:
55
67
def sumEvenAfterQueries (
56
68
self , nums : List[int ], queries : List[List[int ]]
57
69
) -> List[int ]:
70
+ s = sum (x for x in nums if x % 2 == 0 )
58
71
ans = []
59
- s = sum (num for num in nums if num % 2 == 0 )
60
72
for v, i in queries:
61
- old = nums[i]
73
+ if nums[i] % 2 == 0 :
74
+ s -= nums[i]
62
75
nums[i] += v
63
- if nums[i] % 2 == 0 and old % 2 == 0 :
64
- s += v
65
- elif nums[i] % 2 == 0 and old % 2 == 1 :
76
+ if nums[i] % 2 == 0 :
66
77
s += nums[i]
67
- elif old % 2 == 0 :
68
- s -= old
69
78
ans.append(s)
70
79
return ans
71
80
```
@@ -78,25 +87,24 @@ class Solution:
78
87
class Solution {
79
88
public int [] sumEvenAfterQueries (int [] nums , int [][] queries ) {
80
89
int s = 0 ;
81
- for (int num : nums) {
82
- if (num % 2 == 0 ) {
83
- s += num ;
90
+ for (int x : nums) {
91
+ if (x % 2 == 0 ) {
92
+ s += x ;
84
93
}
85
94
}
86
- int [] ans = new int [queries. length];
87
- int idx = 0 ;
88
- for (int [] q : queries) {
95
+ int m = queries. length;
96
+ int [] ans = new int [m];
97
+ int k = 0 ;
98
+ for (var q : queries) {
89
99
int v = q[0 ], i = q[1 ];
90
- int old = nums[i];
100
+ if (nums[i] % 2 == 0 ) {
101
+ s -= nums[i];
102
+ }
91
103
nums[i] += v;
92
- if (nums[i] % 2 == 0 && old % 2 == 0 ) {
93
- s += v;
94
- } else if (nums[i] % 2 == 0 && old % 2 != 0 ) {
104
+ if (nums[i] % 2 == 0 ) {
95
105
s += nums[i];
96
- } else if (old % 2 == 0 ) {
97
- s -= old;
98
106
}
99
- ans[idx ++ ] = s;
107
+ ans[k ++ ] = s;
100
108
}
101
109
return ans;
102
110
}
@@ -110,20 +118,21 @@ class Solution {
110
118
public:
111
119
vector<int > sumEvenAfterQueries(vector<int >& nums, vector<vector<int >>& queries) {
112
120
int s = 0;
113
- for (int& num : nums)
114
- if (num % 2 == 0)
115
- s += num;
121
+ for (int x : nums) {
122
+ if (x % 2 == 0) {
123
+ s += x;
124
+ }
125
+ }
116
126
vector<int > ans;
117
127
for (auto& q : queries) {
118
128
int v = q[ 0] , i = q[ 1] ;
119
- int old = nums[ i] ;
129
+ if (nums[ i] % 2 == 0) {
130
+ s -= nums[ i] ;
131
+ }
120
132
nums[ i] += v;
121
- if (nums[ i] % 2 == 0 && old % 2 == 0)
122
- s += v;
123
- else if (nums[ i] % 2 == 0 && old % 2 != 0)
133
+ if (nums[ i] % 2 == 0) {
124
134
s += nums[ i] ;
125
- else if (old % 2 == 0)
126
- s -= old;
135
+ }
127
136
ans.push_back(s);
128
137
}
129
138
return ans;
@@ -134,28 +143,25 @@ public:
134
143
### **Go**
135
144
136
145
```go
137
- func sumEvenAfterQueries(nums []int, queries [][]int) []int {
146
+ func sumEvenAfterQueries(nums []int, queries [][]int) (ans []int) {
138
147
s := 0
139
- for _, num := range nums {
140
- if num %2 == 0 {
141
- s += num
148
+ for _, x := range nums {
149
+ if x %2 == 0 {
150
+ s += x
142
151
}
143
152
}
144
- var ans []int
145
153
for _, q := range queries {
146
154
v, i := q[0], q[1]
147
- old := nums[i]
155
+ if nums[i]%2 == 0 {
156
+ s -= nums[i]
157
+ }
148
158
nums[i] += v
149
- if nums[i]%2 == 0 && old%2 == 0 {
150
- s += v
151
- } else if nums[i]%2 == 0 && old%2 != 0 {
159
+ if nums[i]%2 == 0 {
152
160
s += nums[i]
153
- } else if old%2 == 0 {
154
- s -= old
155
161
}
156
162
ans = append(ans, s)
157
163
}
158
- return ans
164
+ return
159
165
}
160
166
```
161
167
@@ -169,28 +175,51 @@ func sumEvenAfterQueries(nums []int, queries [][]int) []int {
169
175
*/
170
176
var sumEvenAfterQueries = function (nums , queries ) {
171
177
let s = 0 ;
172
- for (let num of nums) {
173
- if (num % 2 == 0 ) {
174
- s += num ;
178
+ for (const x of nums) {
179
+ if (x % 2 = == 0 ) {
180
+ s += x ;
175
181
}
176
182
}
177
- let ans = [];
178
- for (let [v, i] of queries) {
179
- const old = nums[i];
183
+ const ans = [];
184
+ for (const [v , i ] of queries) {
185
+ if (nums[i] % 2 === 0 ) {
186
+ s -= nums[i];
187
+ }
180
188
nums[i] += v;
181
- if (nums[i] % 2 == 0 && old % 2 == 0 ) {
182
- s += v;
183
- } else if (nums[i] % 2 == 0 && old % 2 != 0 ) {
189
+ if (nums[i] % 2 === 0 ) {
184
190
s += nums[i];
185
- } else if (old % 2 == 0 ) {
186
- s -= old;
187
191
}
188
192
ans .push (s);
189
193
}
190
194
return ans;
191
195
};
192
196
```
193
197
198
+ ### ** TypeScript**
199
+
200
+ ``` ts
201
+ function sumEvenAfterQueries(nums : number [], queries : number [][]): number [] {
202
+ let s = 0 ;
203
+ for (const x of nums ) {
204
+ if (x % 2 === 0 ) {
205
+ s += x ;
206
+ }
207
+ }
208
+ const ans: number [] = [];
209
+ for (const [v, i] of queries ) {
210
+ if (nums [i ] % 2 === 0 ) {
211
+ s -= nums [i ];
212
+ }
213
+ nums [i ] += v ;
214
+ if (nums [i ] % 2 === 0 ) {
215
+ s += nums [i ];
216
+ }
217
+ ans .push (s );
218
+ }
219
+ return ans ;
220
+ }
221
+ ```
222
+
194
223
### ** ...**
195
224
196
225
```
0 commit comments