0985. 查询后的偶数和
大约 2 分钟
---
0985. 查询后的偶数和
- 标签:数组、模拟
- 难度:中等
题目链接
题目大意
描述:
给定一个整数数组 A 和一个查询数组 。
对于第 次查询,有 , ,我们会把 加到 上。然后,第 次查询的答案是 A 中偶数值的和。
(此处给定的 是从 0 开始的索引,每次查询都会永久修改数组 A。)
要求:
返回所有查询的答案。你的答案应当以数组 给出, 为第 次查询的答案。
说明:
- 。
- 。
- 。
- 。
- 。
示例:
- 示例 1:
输入: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:模拟
先计算初始的偶数和,然后对每次查询进行模拟。
- 先遍历数组 ,计算初始的偶数和 。
- 对于每次查询 :
- 如果 是偶数,从 中减去它。
- 更新 。
- 如果更新后的 是偶数,将它加到 中。
- 将当前的 加入结果数组。
- 返回结果数组。
思路 1:代码
class Solution:
def sumEvenAfterQueries(self, nums: List[int], queries: List[List[int]]) -> List[int]:
# 计算初始偶数和
even_sum = sum(x for x in nums if x % 2 == 0)
result = []
for val, index in queries:
# 如果原来是偶数,先从和中减去
if nums[index] % 2 == 0:
even_sum -= nums[index]
# 更新值
nums[index] += val
# 如果更新后是偶数,加到和中
if nums[index] % 2 == 0:
even_sum += nums[index]
result.append(even_sum)
return result思路 1:复杂度分析
- 时间复杂度:,其中 是数组 的长度, 是查询数组 的长度。
- 空间复杂度:,不考虑结果数组的空间。