力扣刷題記錄 陣列 簡單 985查詢後的偶數和

2021-09-26 02:15:06 字數 2243 閱讀 3687

給出乙個整數陣列 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。

首先計算原始陣列a的偶數的和sum,後續只需在此基礎上進行加減,不用多次遍歷。

將val 加到 a[index]上,再計算更新後的a的偶數的和有四種情況:

a[index]原本就是偶數,加上val仍為偶數,則更新後a的偶數和:sum加上val;

a[index]原本就是偶數,加上val變為奇數,則更新後a的偶數和:sum減去原來a[index]的值;

a[index]原本是奇數,加上val變為偶數,則更新後a的偶數和:sum加上原本的a[index]和val;

a[index]原本是奇數,加上val仍為奇數,則更新後a的偶數和不變,仍為sum。

class

solution

(object)

: def sumevenafterqueries

(self, a, queries)

:"""

:type a: list[

int]

:type queries: list[list[

int]

]:rtype: list[

int]

"""

sum_even =

0 # 偶數的和

for num in a:

if num%2==

0:sum_even = sum_even + num

query =

len(queries) # 查詢次數

ans =

list()

for i in range(0

,query)

: val = queries[i][0

] index = queries[i][1

]

# a[index]原本就是偶數

if a[index]%2

==0: # a[index]

+val仍為偶數

if(a[index]

+val)%2

==0:

sum_even = sum_even + val

ans.

(sum_even)

# a[index]

+val為奇數

else

:

sum_even = sum_even - a[index]

ans.

(sum_even)

# a[index]原本是奇數

else

: # a[index]

+val為偶數

if(a[index]

+val)%2

==0:

sum_even = sum_even + a[index]

+ val

ans.

(sum_even)

# a[index]

+val為奇數

else

:

ans.

(sum_even)

# 更新a[index]的值

a[index]

= a[index]

+val

return ans

力扣刷題記錄 陣列 簡單 896單調數列

如果陣列是單調遞增或單調遞減的,那麼它是單調的。如果對於所有 i j,a i a j 那麼陣列 a 是單調遞增的。如果對於所有 i j,a i a j 那麼陣列 a 是單調遞減的。當給定的陣列 a 是單調陣列時返回 true,否則返回 false。class solution object def ...

力扣刷題記錄05

題目分類 二分查詢 時間 2020 09 09 題目一 兩數之和 兩數之和 ii 輸入有序陣列 給定乙個已按照公升序排列 的有序陣列,找到兩個數使得它們相加之和等於目標數。函式應該返回這兩個下標值 index1 和 index2,其中 index1 必須小於 index2。說明 返回的下標值 ind...

力扣刷題記錄2

第一題是每日一題的簡單題。需要記的並不多,一是用迭代器對vector的一些基本操作。可以參考這裡 for vector iterator iter num.begin iter num.end iter 另外是快排的思想。這種思想實用性很廣,即使不需要排序,在找出最大的k個數,對陣列進行分割 以中間...