题目描述:
给出一个整数数组 A
和一个查询数组 queries
。
对于第 i
次查询,有 val = queries[i][0], index = queries[i][1]
,我们会把 val
加到 A[index]
上。然后,第 i
次查询的答案是 A
中偶数值的和。
(此处给定的 index = queries[i][1]
是从 0 开始的索引,每次查询都会永久修改数组 A
。)
返回所有查询的答案。你的答案应当以数组 answer
给出,answer[i]
为第 i
次查询的答案。
示例:
输入:A = [1,2,3,4], queries = [[1,0],[-3,1],[-4,0],[2,3]]
输出:[8,6,2,4]
解释:
开始时,数组为 [1,2,3,4]。
将 1 加到 A[0] 上之后,数组为 [2,2,3,4],偶数值之和为 2 + 2 + 4 = 8。
将 -3 加到 A[1] 上之后,数组为 [2,-1,3,4],偶数值之和为 2 + 4 = 6。
将 -4 加到 A[0] 上之后,数组为 [-2,-1,3,4],偶数值之和为 -2 + 4 = 2。
将 2 加到 A[3] 上之后,数组为 [-2,-1,3,6],偶数值之和为 -2 + 6 = 4。
提示:
1 <= A.length <= 10000
-10000 <= A[i] <= 10000
1 <= queries.length <= 10000
-10000 <= queries[i][0] <= 10000
0 <= queries[i][1] < A.length
Solution:
思想:在A里面的元素,因为最终是要将每次加完queries中的元素的A中的偶数加和放到一个list里。然而A中的元素的变化是由于queries里的元素,每次变化情况都会有所不同。所以我们要将A中的元素由于变化而进行分类讨论,在分类讨论之前,我们要先定义一个total变量存放每次A中偶数加和的所得。一开始A = [1,2,3,4],所以当前偶数和为2+4=6。
现在开始分类讨论:
A中的元素有如下变化情况:
1.偶数->奇数:当偶数变奇数时,因为原先的偶数已经被加和,现在偶数变成奇数,因此要减去原先的偶数。
2.偶数—>偶数:这种情况,只需要加上queries中的加和元素
3.奇数—>偶数:这种情况,只需要加上queries中的加和元素
4.奇数->奇数:这种情况,不需要做任何操作
Code:
class Solution:
def sumEvenAfterQueries(self,A,queries):
'''
:param A: list[int]
:param queries: list[list[int]]
:return: list[int]
'''
total = sum(x for x in A if x % 2 == 0)
a = []
for x,y in queries:
if A[y] % 2 == 0:total -= A[y]
A[y] += x
if A[y] % 2 == 0:total += A[y]
a.append(total)
return a