Skip to content

Commit c17cd02

Browse files
authored
feat: add solutions to lc problem: No.0985 (doocs#1233)
No.0985.Sum of Even Numbers After Queries
1 parent 8c57d4e commit c17cd02

File tree

8 files changed

+214
-156
lines changed

8 files changed

+214
-156
lines changed

solution/0900-0999/0985.Sum of Even Numbers After Queries/README.md

Lines changed: 81 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,18 @@
4444

4545
<!-- 这里可写通用的实现逻辑 -->
4646

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+
4759
<!-- tabs:start -->
4860

4961
### **Python3**
@@ -55,17 +67,14 @@ class Solution:
5567
def sumEvenAfterQueries(
5668
self, nums: List[int], queries: List[List[int]]
5769
) -> List[int]:
70+
s = sum(x for x in nums if x % 2 == 0)
5871
ans = []
59-
s = sum(num for num in nums if num % 2 == 0)
6072
for v, i in queries:
61-
old = nums[i]
73+
if nums[i] % 2 == 0:
74+
s -= nums[i]
6275
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:
6677
s += nums[i]
67-
elif old % 2 == 0:
68-
s -= old
6978
ans.append(s)
7079
return ans
7180
```
@@ -78,25 +87,24 @@ class Solution:
7887
class Solution {
7988
public int[] sumEvenAfterQueries(int[] nums, int[][] queries) {
8089
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;
8493
}
8594
}
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) {
8999
int v = q[0], i = q[1];
90-
int old = nums[i];
100+
if (nums[i] % 2 == 0) {
101+
s -= nums[i];
102+
}
91103
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) {
95105
s += nums[i];
96-
} else if (old % 2 == 0) {
97-
s -= old;
98106
}
99-
ans[idx++] = s;
107+
ans[k++] = s;
100108
}
101109
return ans;
102110
}
@@ -110,20 +118,21 @@ class Solution {
110118
public:
111119
vector<int> sumEvenAfterQueries(vector<int>& nums, vector<vector<int>>& queries) {
112120
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+
}
116126
vector<int> ans;
117127
for (auto& q : queries) {
118128
int v = q[0], i = q[1];
119-
int old = nums[i];
129+
if (nums[i] % 2 == 0) {
130+
s -= nums[i];
131+
}
120132
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) {
124134
s += nums[i];
125-
else if (old % 2 == 0)
126-
s -= old;
135+
}
127136
ans.push_back(s);
128137
}
129138
return ans;
@@ -134,28 +143,25 @@ public:
134143
### **Go**
135144
136145
```go
137-
func sumEvenAfterQueries(nums []int, queries [][]int) []int {
146+
func sumEvenAfterQueries(nums []int, queries [][]int) (ans []int) {
138147
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
142151
}
143152
}
144-
var ans []int
145153
for _, q := range queries {
146154
v, i := q[0], q[1]
147-
old := nums[i]
155+
if nums[i]%2 == 0 {
156+
s -= nums[i]
157+
}
148158
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 {
152160
s += nums[i]
153-
} else if old%2 == 0 {
154-
s -= old
155161
}
156162
ans = append(ans, s)
157163
}
158-
return ans
164+
return
159165
}
160166
```
161167

@@ -169,28 +175,51 @@ func sumEvenAfterQueries(nums []int, queries [][]int) []int {
169175
*/
170176
var sumEvenAfterQueries = function (nums, queries) {
171177
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;
175181
}
176182
}
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+
}
180188
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) {
184190
s += nums[i];
185-
} else if (old % 2 == 0) {
186-
s -= old;
187191
}
188192
ans.push(s);
189193
}
190194
return ans;
191195
};
192196
```
193197

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+
194223
### **...**
195224

196225
```

0 commit comments

Comments
 (0)