985. Sum of Even Numbers After Queries
leetcode medium
Task
Дан целочисленный массив nums и массив queries, где queries[i] = [vali, indexi].
Для каждого запроса i, сначала примените nums[indexi] = nums[indexi] + vali, затем выведите сумму четных значений nums.
Верните целочисленный массив answer, где answer[i] - это ответ на i-й запрос.
Пример
Input: nums = [1], queries = [[4,0]]
Output: [0]
C# solution
matched/originalpublic class Solution {
public int[] SumEvenAfterQueries(int[] nums, int[][] queries) {
int evenSum = nums.Where(x => x % 2 == 0).Sum();
int[] result = new int[queries.Length];
for (int i = 0; i < queries.Length; i++) {
int val = queries[i][0], index = queries[i][1];
if (nums[index] % 2 == 0) {
evenSum -= nums[index];
}
nums[index] += val;
if (nums[index] % 2 == 0) {
evenSum += nums[index];
}
result[i] = evenSum;
}
return result;
}
}C++ solution
auto-draft, review before submit#include <bits/stdc++.h>
using namespace std;
// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
public vector<int>& SumEvenAfterQueries(vector<int>& nums, int[][] queries) {
int evenSum = nums.Where(x => x % 2 == 0).Sum();
vector<int>& result = new int[queries.size()];
for (int i = 0; i < queries.size(); i++) {
int val = queries[i][0], index = queries[i][1];
if (nums[index] % 2 == 0) {
evenSum -= nums[index];
}
nums[index] += val;
if (nums[index] % 2 == 0) {
evenSum += nums[index];
}
result[i] = evenSum;
}
return result;
}
}Java solution
matched/originalpublic class Solution {
public int[] sumEvenAfterQueries(int[] nums, int[][] queries) {
int evenSum = 0;
for (int num : nums) {
if (num % 2 == 0) {
evenSum += num;
}
}
int[] result = new int[queries.length];
for (int i = 0; i < queries.length; i++) {
int val = queries[i][0], index = queries[i][1];
if (nums[index] % 2 == 0) {
evenSum -= nums[index];
}
nums[index] += val;
if (nums[index] % 2 == 0) {
evenSum += nums[index];
}
result[i] = evenSum;
}
return result;
}
}JavaScript solution
matched/originalvar sumEvenAfterQueries = function(nums, queries) {
let evenSum = nums.reduce((acc, num) => num % 2 === 0 ? acc + num : acc, 0);
const result = [];
for (const [val, index] of queries) {
if (nums[index] % 2 === 0) {
evenSum -= nums[index];
}
nums[index] += val;
if (nums[index] % 2 === 0) {
evenSum += nums[index];
}
result.push(evenSum);
}
return result;
};Go solution
matched/originalfunc sumEvenAfterQueries(nums []int, queries [][]int) []int {
evenSum := 0
for _, num := range nums {
if num % 2 == 0 {
evenSum += num
}
}
result := make([]int, len(queries))
for i, query := range queries {
val, index := query[0], query[1]
if nums[index] % 2 == 0 {
evenSum -= nums[index]
}
nums[index] += val
if nums[index] % 2 == 0 {
evenSum += nums[index]
}
result[i] = evenSum
}
return result
}Explanation
Algorithm
1⃣Инициализация переменных:
Завести переменную evenSum для хранения суммы всех четных чисел в массиве nums.
Пройти по массиву nums и вычислить начальное значение evenSum, сложив все четные числа в nums.
2⃣Обработка запросов:
Создать пустой массив result для хранения ответов на каждый запрос.
Для каждого запроса [val, index] из массива queries выполнить следующие действия:
Если значение nums[index] четное, вычесть его из evenSum.
Обновить nums[index] добавлением val.
Если новое значение nums[index] четное, добавить его к evenSum.
Добавить текущее значение evenSum в массив result.
3⃣Возврат результата:
Вернуть массив result, содержащий ответы на все запросы.
😎