Skip to content

Commit f65ceab

Browse files
authored
feat: add solutions to lc problem: No.0985 (#4131)
No.0985.Sum of Even Numbers After Queries
1 parent aa1a162 commit f65ceab

File tree

6 files changed

+156
-44
lines changed

6 files changed

+156
-44
lines changed

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

+55-19
Original file line numberDiff line numberDiff line change
@@ -59,15 +59,11 @@ tags:
5959

6060
### 方法一:模拟
6161

62-
我们用一个变量 $s$ 记录数组 $nums$ 中所有偶数的和。
62+
我们用一个整型变量 $\textit{s}$ 记录数组 $\textit{nums}$ 中所有偶数的和,初始时 $\textit{s}$ 为数组 $\textit{nums}$ 中所有偶数的和。
6363

64-
对于每次查询 $(v, i)$
64+
对于每次查询 $(v, i)$,我们首先判断 $\textit{nums}[i]$ 是否为偶数,若 $\textit{nums}[i]$ 为偶数,则将 $\textit{s}$ 减去 $\textit{nums}[i]$;然后将 $\textit{nums}[i]$ 加上 $v$;若 $\textit{nums}[i]$ 为偶数,则将 $\textit{s}$ 加上 $\textit{nums}[i]$,然后将 $\textit{s}$ 加入答案数组。
6565

66-
我们先判断 $nums[i]$ 是否为偶数,若 $nums[i]$ 为偶数,则将 $s$ 减去 $nums[i]$;然后将 $nums[i]$ 加上 $v$;
67-
68-
若 $nums[i]$ 为偶数,则将 $s$ 加上 $nums[i]$,然后将 $s$ 加入答案数组。
69-
70-
时间复杂度 $O(n + m)$,其中 $n$ 和 $m$ 分别为数组 $nums$ 和 $queries$ 的长度。忽略答案数组的空间消耗,空间复杂度 $O(1)$。
66+
时间复杂度 $O(n + m)$,其中 $n$ 和 $m$ 分别为数组 $\textit{nums}$ 和 $\textit{queries}$ 的长度。忽略答案数组的空间消耗,空间复杂度 $O(1)$。
7167

7268
<!-- tabs:start -->
7369

@@ -178,12 +174,7 @@ func sumEvenAfterQueries(nums []int, queries [][]int) (ans []int) {
178174

179175
```ts
180176
function sumEvenAfterQueries(nums: number[], queries: number[][]): number[] {
181-
let s = 0;
182-
for (const x of nums) {
183-
if (x % 2 === 0) {
184-
s += x;
185-
}
186-
}
177+
let s = nums.reduce((acc, x) => acc + (x % 2 === 0 ? x : 0), 0);
187178
const ans: number[] = [];
188179
for (const [v, i] of queries) {
189180
if (nums[i] % 2 === 0) {
@@ -199,6 +190,31 @@ function sumEvenAfterQueries(nums: number[], queries: number[][]): number[] {
199190
}
200191
```
201192

193+
#### Rust
194+
195+
```rust
196+
impl Solution {
197+
pub fn sum_even_after_queries(mut nums: Vec<i32>, queries: Vec<Vec<i32>>) -> Vec<i32> {
198+
let mut s: i32 = nums.iter().filter(|&x| x % 2 == 0).sum();
199+
let mut ans = Vec::with_capacity(queries.len());
200+
201+
for query in queries {
202+
let (v, i) = (query[0], query[1] as usize);
203+
if nums[i] % 2 == 0 {
204+
s -= nums[i];
205+
}
206+
nums[i] += v;
207+
if nums[i] % 2 == 0 {
208+
s += nums[i];
209+
}
210+
ans.push(s);
211+
}
212+
213+
ans
214+
}
215+
}
216+
```
217+
202218
#### JavaScript
203219

204220
```js
@@ -208,12 +224,7 @@ function sumEvenAfterQueries(nums: number[], queries: number[][]): number[] {
208224
* @return {number[]}
209225
*/
210226
var sumEvenAfterQueries = function (nums, queries) {
211-
let s = 0;
212-
for (const x of nums) {
213-
if (x % 2 === 0) {
214-
s += x;
215-
}
216-
}
227+
let s = nums.reduce((acc, cur) => acc + (cur % 2 === 0 ? cur : 0), 0);
217228
const ans = [];
218229
for (const [v, i] of queries) {
219230
if (nums[i] % 2 === 0) {
@@ -229,6 +240,31 @@ var sumEvenAfterQueries = function (nums, queries) {
229240
};
230241
```
231242

243+
#### C#
244+
245+
```cs
246+
public class Solution {
247+
public int[] SumEvenAfterQueries(int[] nums, int[][] queries) {
248+
int s = nums.Where(x => x % 2 == 0).Sum();
249+
int[] ans = new int[queries.Length];
250+
251+
for (int j = 0; j < queries.Length; j++) {
252+
int v = queries[j][0], i = queries[j][1];
253+
if (nums[i] % 2 == 0) {
254+
s -= nums[i];
255+
}
256+
nums[i] += v;
257+
if (nums[i] % 2 == 0) {
258+
s += nums[i];
259+
}
260+
ans[j] = s;
261+
}
262+
263+
return ans;
264+
}
265+
}
266+
```
267+
232268
<!-- tabs:end -->
233269

234270
<!-- solution:end -->

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

+59-13
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,13 @@ After adding 2 to nums[3], the array is [-2,-1,3,6], and the sum of even values
6060

6161
<!-- solution:start -->
6262

63-
### Solution 1
63+
### Solution 1: Simulation
64+
65+
We use an integer variable $\textit{s}$ to record the sum of all even numbers in the array $\textit{nums}$. Initially, $\textit{s}$ is the sum of all even numbers in the array $\textit{nums}$.
66+
67+
For each query $(v, i)$, we first check if $\textit{nums}[i]$ is even. If $\textit{nums}[i]$ is even, we subtract $\textit{nums}[i]$ from $\textit{s}$. Then, we add $v$ to $\textit{nums}[i]$. If $\textit{nums}[i]$ is even, we add $\textit{nums}[i]$ to $\textit{s}$, and then add $\textit{s}$ to the answer array.
68+
69+
The time complexity is $O(n + m)$, where $n$ and $m$ are the lengths of the arrays $\textit{nums}$ and $\textit{queries}$, respectively. Ignoring the space consumption of the answer array, the space complexity is $O(1)$.
6470

6571
<!-- tabs:start -->
6672

@@ -171,12 +177,7 @@ func sumEvenAfterQueries(nums []int, queries [][]int) (ans []int) {
171177

172178
```ts
173179
function sumEvenAfterQueries(nums: number[], queries: number[][]): number[] {
174-
let s = 0;
175-
for (const x of nums) {
176-
if (x % 2 === 0) {
177-
s += x;
178-
}
179-
}
180+
let s = nums.reduce((acc, x) => acc + (x % 2 === 0 ? x : 0), 0);
180181
const ans: number[] = [];
181182
for (const [v, i] of queries) {
182183
if (nums[i] % 2 === 0) {
@@ -192,6 +193,31 @@ function sumEvenAfterQueries(nums: number[], queries: number[][]): number[] {
192193
}
193194
```
194195

196+
#### Rust
197+
198+
```rust
199+
impl Solution {
200+
pub fn sum_even_after_queries(mut nums: Vec<i32>, queries: Vec<Vec<i32>>) -> Vec<i32> {
201+
let mut s: i32 = nums.iter().filter(|&x| x % 2 == 0).sum();
202+
let mut ans = Vec::with_capacity(queries.len());
203+
204+
for query in queries {
205+
let (v, i) = (query[0], query[1] as usize);
206+
if nums[i] % 2 == 0 {
207+
s -= nums[i];
208+
}
209+
nums[i] += v;
210+
if nums[i] % 2 == 0 {
211+
s += nums[i];
212+
}
213+
ans.push(s);
214+
}
215+
216+
ans
217+
}
218+
}
219+
```
220+
195221
#### JavaScript
196222

197223
```js
@@ -201,12 +227,7 @@ function sumEvenAfterQueries(nums: number[], queries: number[][]): number[] {
201227
* @return {number[]}
202228
*/
203229
var sumEvenAfterQueries = function (nums, queries) {
204-
let s = 0;
205-
for (const x of nums) {
206-
if (x % 2 === 0) {
207-
s += x;
208-
}
209-
}
230+
let s = nums.reduce((acc, cur) => acc + (cur % 2 === 0 ? cur : 0), 0);
210231
const ans = [];
211232
for (const [v, i] of queries) {
212233
if (nums[i] % 2 === 0) {
@@ -222,6 +243,31 @@ var sumEvenAfterQueries = function (nums, queries) {
222243
};
223244
```
224245

246+
#### C#
247+
248+
```cs
249+
public class Solution {
250+
public int[] SumEvenAfterQueries(int[] nums, int[][] queries) {
251+
int s = nums.Where(x => x % 2 == 0).Sum();
252+
int[] ans = new int[queries.Length];
253+
254+
for (int j = 0; j < queries.Length; j++) {
255+
int v = queries[j][0], i = queries[j][1];
256+
if (nums[i] % 2 == 0) {
257+
s -= nums[i];
258+
}
259+
nums[i] += v;
260+
if (nums[i] % 2 == 0) {
261+
s += nums[i];
262+
}
263+
ans[j] = s;
264+
}
265+
266+
return ans;
267+
}
268+
}
269+
```
270+
225271
<!-- tabs:end -->
226272

227273
<!-- solution:end -->
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
public class Solution {
2+
public int[] SumEvenAfterQueries(int[] nums, int[][] queries) {
3+
int s = nums.Where(x => x % 2 == 0).Sum();
4+
int[] ans = new int[queries.Length];
5+
6+
for (int j = 0; j < queries.Length; j++) {
7+
int v = queries[j][0], i = queries[j][1];
8+
if (nums[i] % 2 == 0) {
9+
s -= nums[i];
10+
}
11+
nums[i] += v;
12+
if (nums[i] % 2 == 0) {
13+
s += nums[i];
14+
}
15+
ans[j] = s;
16+
}
17+
18+
return ans;
19+
}
20+
}

solution/0900-0999/0985.Sum of Even Numbers After Queries/Solution.js

+1-6
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,7 @@
44
* @return {number[]}
55
*/
66
var sumEvenAfterQueries = function (nums, queries) {
7-
let s = 0;
8-
for (const x of nums) {
9-
if (x % 2 === 0) {
10-
s += x;
11-
}
12-
}
7+
let s = nums.reduce((acc, cur) => acc + (cur % 2 === 0 ? cur : 0), 0);
138
const ans = [];
149
for (const [v, i] of queries) {
1510
if (nums[i] % 2 === 0) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
impl Solution {
2+
pub fn sum_even_after_queries(mut nums: Vec<i32>, queries: Vec<Vec<i32>>) -> Vec<i32> {
3+
let mut s: i32 = nums.iter().filter(|&x| x % 2 == 0).sum();
4+
let mut ans = Vec::with_capacity(queries.len());
5+
6+
for query in queries {
7+
let (v, i) = (query[0], query[1] as usize);
8+
if nums[i] % 2 == 0 {
9+
s -= nums[i];
10+
}
11+
nums[i] += v;
12+
if nums[i] % 2 == 0 {
13+
s += nums[i];
14+
}
15+
ans.push(s);
16+
}
17+
18+
ans
19+
}
20+
}

solution/0900-0999/0985.Sum of Even Numbers After Queries/Solution.ts

+1-6
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,5 @@
11
function sumEvenAfterQueries(nums: number[], queries: number[][]): number[] {
2-
let s = 0;
3-
for (const x of nums) {
4-
if (x % 2 === 0) {
5-
s += x;
6-
}
7-
}
2+
let s = nums.reduce((acc, x) => acc + (x % 2 === 0 ? x : 0), 0);
83
const ans: number[] = [];
94
for (const [v, i] of queries) {
105
if (nums[i] % 2 === 0) {

0 commit comments

Comments
 (0)