← Static tasks

985. Sum of Even Numbers After Queries

leetcode medium

#array#backtracking#csharp#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/original
public 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/original
public 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/original
var 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/original
func 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, содержащий ответы на все запросы.

😎