Leetcode PHP題解--D48 985. Sum of Even Numbers After Queries
D48 985. Sum of Even Numbers After Queries
題目連結
985. Sum of Even Numbers After Queries
題目分析
給定一個初始陣列A
,再給定一個二維運算元組Q
。
運算元組裡的每一個值是一個數組。其第一個值代表要新增的數。第二個值代表需要操作的數字在陣列A
中的下標。
也即,需要對A[Q[1]]
加A[Q[0]
。
結果中第i個元素的結果為,當執行第i步時,陣列A中偶數元素的和。
思路
這題如果每一步都array_sum的話時間開銷會很大,所以採取的方案是先計算初始陣列中偶數的和。
再在每一步計算的過程中,判斷當前位置是否為偶數。
若為偶數,那麼表明在最初已經計算過偶數和了,那麼把它從偶數和中減去。
判斷相加了第0個元素後,是否為偶數。是則加進偶數和中。
修改原陣列A用於後面計算。
把每一步的偶數和記錄下來,以便最後返回。
最終程式碼
<?php class Solution { /** * @param Integer[] $A * @param Integer[][] $queries * @return Integer[] */ function sumEvenAfterQueries($A, $queries) { $evens = array_filter($A,function($val){ return $val%2==0; }); $total = array_sum($evens); $sums = []; foreach($queries as $query){ if($A[$query[1]]%2 == 0){ $total -= $A[$query[1]]; } if(($A[$query[1]]+$query[0])%2==0){ $total += $query[0] + $A[$query[1]]; } $sums[] = $total; $A[$query[1]] += $query[0]; } return $sums; } }
若覺得本文章對你有用,歡迎用愛發電 資助。