diff --git a/solution/0900-0999/0985.Sum of Even Numbers After Queries/README.md b/solution/0900-0999/0985.Sum of Even Numbers After Queries/README.md index 16cc6bfeaaa40..5afce3747e8fd 100644 --- a/solution/0900-0999/0985.Sum of Even Numbers After Queries/README.md +++ b/solution/0900-0999/0985.Sum of Even Numbers After Queries/README.md @@ -59,15 +59,11 @@ tags: ### 方法一:模拟 -我们用一个变量 $s$ 记录数组 $nums$ 中所有偶数的和。 +我们用一个整型变量 $\textit{s}$ 记录数组 $\textit{nums}$ 中所有偶数的和,初始时 $\textit{s}$ 为数组 $\textit{nums}$ 中所有偶数的和。 -对于每次查询 $(v, i)$: +对于每次查询 $(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}$ 加入答案数组。 -我们先判断 $nums[i]$ 是否为偶数,若 $nums[i]$ 为偶数,则将 $s$ 减去 $nums[i]$;然后将 $nums[i]$ 加上 $v$; - -若 $nums[i]$ 为偶数,则将 $s$ 加上 $nums[i]$,然后将 $s$ 加入答案数组。 - -时间复杂度 $O(n + m)$,其中 $n$ 和 $m$ 分别为数组 $nums$ 和 $queries$ 的长度。忽略答案数组的空间消耗,空间复杂度 $O(1)$。 +时间复杂度 $O(n + m)$,其中 $n$ 和 $m$ 分别为数组 $\textit{nums}$ 和 $\textit{queries}$ 的长度。忽略答案数组的空间消耗,空间复杂度 $O(1)$。 @@ -178,12 +174,7 @@ func sumEvenAfterQueries(nums []int, queries [][]int) (ans []int) { ```ts function sumEvenAfterQueries(nums: number[], queries: number[][]): number[] { - let s = 0; - for (const x of nums) { - if (x % 2 === 0) { - s += x; - } - } + let s = nums.reduce((acc, x) => acc + (x % 2 === 0 ? x : 0), 0); const ans: number[] = []; for (const [v, i] of queries) { if (nums[i] % 2 === 0) { @@ -199,6 +190,31 @@ function sumEvenAfterQueries(nums: number[], queries: number[][]): number[] { } ``` +#### Rust + +```rust +impl Solution { + pub fn sum_even_after_queries(mut nums: Vec, queries: Vec>) -> Vec { + let mut s: i32 = nums.iter().filter(|&x| x % 2 == 0).sum(); + let mut ans = Vec::with_capacity(queries.len()); + + for query in queries { + let (v, i) = (query[0], query[1] as usize); + if nums[i] % 2 == 0 { + s -= nums[i]; + } + nums[i] += v; + if nums[i] % 2 == 0 { + s += nums[i]; + } + ans.push(s); + } + + ans + } +} +``` + #### JavaScript ```js @@ -208,12 +224,7 @@ function sumEvenAfterQueries(nums: number[], queries: number[][]): number[] { * @return {number[]} */ var sumEvenAfterQueries = function (nums, queries) { - let s = 0; - for (const x of nums) { - if (x % 2 === 0) { - s += x; - } - } + let s = nums.reduce((acc, cur) => acc + (cur % 2 === 0 ? cur : 0), 0); const ans = []; for (const [v, i] of queries) { if (nums[i] % 2 === 0) { @@ -229,6 +240,31 @@ var sumEvenAfterQueries = function (nums, queries) { }; ``` +#### C# + +```cs +public class Solution { + public int[] SumEvenAfterQueries(int[] nums, int[][] queries) { + int s = nums.Where(x => x % 2 == 0).Sum(); + int[] ans = new int[queries.Length]; + + for (int j = 0; j < queries.Length; j++) { + int v = queries[j][0], i = queries[j][1]; + if (nums[i] % 2 == 0) { + s -= nums[i]; + } + nums[i] += v; + if (nums[i] % 2 == 0) { + s += nums[i]; + } + ans[j] = s; + } + + return ans; + } +} +``` + diff --git a/solution/0900-0999/0985.Sum of Even Numbers After Queries/README_EN.md b/solution/0900-0999/0985.Sum of Even Numbers After Queries/README_EN.md index 5c08d05855eba..bc799b887a7f1 100644 --- a/solution/0900-0999/0985.Sum of Even Numbers After Queries/README_EN.md +++ b/solution/0900-0999/0985.Sum of Even Numbers After Queries/README_EN.md @@ -60,7 +60,13 @@ After adding 2 to nums[3], the array is [-2,-1,3,6], and the sum of even values -### Solution 1 +### Solution 1: Simulation + +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}$. + +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. + +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)$. @@ -171,12 +177,7 @@ func sumEvenAfterQueries(nums []int, queries [][]int) (ans []int) { ```ts function sumEvenAfterQueries(nums: number[], queries: number[][]): number[] { - let s = 0; - for (const x of nums) { - if (x % 2 === 0) { - s += x; - } - } + let s = nums.reduce((acc, x) => acc + (x % 2 === 0 ? x : 0), 0); const ans: number[] = []; for (const [v, i] of queries) { if (nums[i] % 2 === 0) { @@ -192,6 +193,31 @@ function sumEvenAfterQueries(nums: number[], queries: number[][]): number[] { } ``` +#### Rust + +```rust +impl Solution { + pub fn sum_even_after_queries(mut nums: Vec, queries: Vec>) -> Vec { + let mut s: i32 = nums.iter().filter(|&x| x % 2 == 0).sum(); + let mut ans = Vec::with_capacity(queries.len()); + + for query in queries { + let (v, i) = (query[0], query[1] as usize); + if nums[i] % 2 == 0 { + s -= nums[i]; + } + nums[i] += v; + if nums[i] % 2 == 0 { + s += nums[i]; + } + ans.push(s); + } + + ans + } +} +``` + #### JavaScript ```js @@ -201,12 +227,7 @@ function sumEvenAfterQueries(nums: number[], queries: number[][]): number[] { * @return {number[]} */ var sumEvenAfterQueries = function (nums, queries) { - let s = 0; - for (const x of nums) { - if (x % 2 === 0) { - s += x; - } - } + let s = nums.reduce((acc, cur) => acc + (cur % 2 === 0 ? cur : 0), 0); const ans = []; for (const [v, i] of queries) { if (nums[i] % 2 === 0) { @@ -222,6 +243,31 @@ var sumEvenAfterQueries = function (nums, queries) { }; ``` +#### C# + +```cs +public class Solution { + public int[] SumEvenAfterQueries(int[] nums, int[][] queries) { + int s = nums.Where(x => x % 2 == 0).Sum(); + int[] ans = new int[queries.Length]; + + for (int j = 0; j < queries.Length; j++) { + int v = queries[j][0], i = queries[j][1]; + if (nums[i] % 2 == 0) { + s -= nums[i]; + } + nums[i] += v; + if (nums[i] % 2 == 0) { + s += nums[i]; + } + ans[j] = s; + } + + return ans; + } +} +``` + diff --git a/solution/0900-0999/0985.Sum of Even Numbers After Queries/Solution.cs b/solution/0900-0999/0985.Sum of Even Numbers After Queries/Solution.cs new file mode 100644 index 0000000000000..f311a247fa05f --- /dev/null +++ b/solution/0900-0999/0985.Sum of Even Numbers After Queries/Solution.cs @@ -0,0 +1,20 @@ +public class Solution { + public int[] SumEvenAfterQueries(int[] nums, int[][] queries) { + int s = nums.Where(x => x % 2 == 0).Sum(); + int[] ans = new int[queries.Length]; + + for (int j = 0; j < queries.Length; j++) { + int v = queries[j][0], i = queries[j][1]; + if (nums[i] % 2 == 0) { + s -= nums[i]; + } + nums[i] += v; + if (nums[i] % 2 == 0) { + s += nums[i]; + } + ans[j] = s; + } + + return ans; + } +} diff --git a/solution/0900-0999/0985.Sum of Even Numbers After Queries/Solution.js b/solution/0900-0999/0985.Sum of Even Numbers After Queries/Solution.js index 319757b4d97d2..a50af05827c61 100644 --- a/solution/0900-0999/0985.Sum of Even Numbers After Queries/Solution.js +++ b/solution/0900-0999/0985.Sum of Even Numbers After Queries/Solution.js @@ -4,12 +4,7 @@ * @return {number[]} */ var sumEvenAfterQueries = function (nums, queries) { - let s = 0; - for (const x of nums) { - if (x % 2 === 0) { - s += x; - } - } + let s = nums.reduce((acc, cur) => acc + (cur % 2 === 0 ? cur : 0), 0); const ans = []; for (const [v, i] of queries) { if (nums[i] % 2 === 0) { diff --git a/solution/0900-0999/0985.Sum of Even Numbers After Queries/Solution.rs b/solution/0900-0999/0985.Sum of Even Numbers After Queries/Solution.rs new file mode 100644 index 0000000000000..6accae9e1be68 --- /dev/null +++ b/solution/0900-0999/0985.Sum of Even Numbers After Queries/Solution.rs @@ -0,0 +1,20 @@ +impl Solution { + pub fn sum_even_after_queries(mut nums: Vec, queries: Vec>) -> Vec { + let mut s: i32 = nums.iter().filter(|&x| x % 2 == 0).sum(); + let mut ans = Vec::with_capacity(queries.len()); + + for query in queries { + let (v, i) = (query[0], query[1] as usize); + if nums[i] % 2 == 0 { + s -= nums[i]; + } + nums[i] += v; + if nums[i] % 2 == 0 { + s += nums[i]; + } + ans.push(s); + } + + ans + } +} diff --git a/solution/0900-0999/0985.Sum of Even Numbers After Queries/Solution.ts b/solution/0900-0999/0985.Sum of Even Numbers After Queries/Solution.ts index c85b472ae4baa..58aa5e04e4310 100644 --- a/solution/0900-0999/0985.Sum of Even Numbers After Queries/Solution.ts +++ b/solution/0900-0999/0985.Sum of Even Numbers After Queries/Solution.ts @@ -1,10 +1,5 @@ function sumEvenAfterQueries(nums: number[], queries: number[][]): number[] { - let s = 0; - for (const x of nums) { - if (x % 2 === 0) { - s += x; - } - } + let s = nums.reduce((acc, x) => acc + (x % 2 === 0 ? x : 0), 0); const ans: number[] = []; for (const [v, i] of queries) { if (nums[i] % 2 === 0) {