LeetCode 985 查詢後的偶數和

2021-09-11 19:26:12 字數 2221 閱讀 2875

鏈結

給出乙個整數陣列 a 和乙個查詢陣列 queries。

對於第 i 次查詢,有 val = queries[i][0], index = queries[i][1],我們會把 val 加到 a[index] 上。然後,第 i 次查詢的答案是 a 中偶數值的和。

返回所有查詢的答案

先執行更新陣列操作,然後對偶數求和,序列。問題在於複雜度太高,超時

def

sumevenafterqueries

(a:'list[int]'

, queries:

'list[list[int]]')-

>

'list[int]'

: ans =

for query in queries:

# 更新陣列

a[query[1]

]+= query[0]

# 計算偶數和

sum=

sum(i for i in a if x %2==

0)sum)

return ans

可以對方法一中的部分情況進行判斷,減少計算的次數

利用奇偶相加還是奇數的原理進行剪枝在,只需要對當前修改位置元素的奇偶進行判斷,其餘位置的元素不會產生影響

def

sumevenafterqueries3

(a:'list[int]'

, queries:

'list[list[int]]')-

>

'list[int]'

: ans =

# 首先計算原始序列中的偶數和

ret =

sum(x for x in a if x %2==

0)for val, pos in queries:

# 這裡使用的是解包的技巧

if a[pos]%2

==0:# 如果修改位置是偶數,加上偶數還是偶數,總結果中加上。加上奇數變成奇數,總結果中減去

if val %2==

0:ret += val

else

: ret -= a[pos]

else

:# 如果修改位置是奇數,只有加上奇數的情況上才在總結果中加上

if val %2:

ret += val + a[pos]

a[pos]

+= val

return ans

c++

vector<

int>

sumevenafterqueries

(vector<

int>

& a, vectorint>>

& queries)

}for

(int i =

0; i < queries.

size()

; i++

)else

}else

else

} vi.

push_back

(ou);}

return vi;

}

不同的剪枝策略

如果當前項是偶數,計算出其餘的偶數和。如果是奇數,整體的偶數和就是其餘項的偶數和。

然後對當前項進行修改

修改後為偶數 則加到其餘項的偶數和中去

python

def

sumevenafterqueries4

(a:'list[int]'

, queries:

'list[list[int]]')-

>

'list[int]'

: ans =

ret =

sum(x for x in a if x %2==

0)for val, pos in queries:

# 第一步 計算出其餘未修改項中的偶數和

if a[pos]%2

==0: ret -= a[pos]

# 第二步 進行更新

a[pos]

+= val

# 第三步 判斷更新後的值

if a[pos]%2

==0: ret += a[pos]

return ans

LeetCode985 查詢後的偶數和

給出乙個整數陣列a和乙個查詢陣列queries。對於第i次查詢,有val queries i 0 index queries i 1 我們會把val加到a index 上。然後,第i次查詢的答案是a中偶數值的和。此處給定的index queries i 1 是從 0 開始的索引,每次查詢都會永久修改...

LeetCode 985 查詢後的偶數和

給出乙個整數陣列 a 和乙個查詢陣列 queries。對於第 i 次查詢,有 val queries i 0 index queries i 1 我們會把 val 加到 a index 上。然後,第 i 次查詢的答案是 a 中偶數值的和。此處給定的 index queries i 1 是從 0 開始...

LeetCode 985 查詢後的偶數和

給出乙個整數陣列 a 和乙個查詢陣列 queries。對於第 i 次查詢,有 val queries i 0 index queries i 1 我們會把 val 加到 a index 上。然後,第 i 次查詢的答案是 a 中偶數值的和。此處給定的 index queries i 1 是從 0 開始...