1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Solution {
public int[] sumEvenAfterQueries(int[] nums, int[][] queries) {
int sum = 0;
for (int num : nums) {
if (num % 2 == 0)
sum += num;
}
int[] ans = new int[queries.length];
int index = 0;
for (int[] query : queries) {
int currNum = nums[query[1]];
if (currNum % 2 == 0) {
sum -= currNum;
}
currNum += query[0];
if (currNum % 2 == 0) {
sum += currNum;
}
nums[query[1]] = currNum;
ans[index] = sum;
index += 1;
}
return ans;
}
}

一直维护一个even number的sum即可. 在query前, 先看要被更改的num是不是even number, 如果是的话先把它从sum中减去, 不是的话就不动. 然后把val加到num上, 在看加完是不是even, 是的话就加到sum上不是的话就不加.

时间复杂度: O(n + m)
空间复杂度: O(m) 因为我们要生成长度为ans的array去返回.