题目描述
时间复杂度:O(N)
空间复杂度:O(1)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
class Solution { public: vector<int> sumEvenAfterQueries(vector<int>& A, vector<vector<int> >& queries) { vector<int> res(A.size(), 0); int sum=0; A[queries[0][1]]+=queries[0][0]; for(int &num : A) { if (num%2==0) sum+=num; } res[0]=sum; for(int i=1;i<queries.size();++i) { int val=queries[i][0]; int idx=queries[i][1]; int tmp = A[idx]; A[idx]+=val; if (isEven(tmp)) { if (!isEven(A[idx])) sum-=tmp; else sum+=val; } else { if (isEven(A[idx])) sum+=A[idx]; } res[i]=sum; } return res; }
private: inline bool isEven(int a) { return !(a & 1); } };
|
刚开始本来是想要用取模来做的,结果一不小心踩了大坑,以后要注意负数取模的正确计算方式
1 2 3
| int mod(int x, int m) { return (x%m + m)%m; }
|
收获: 在不同的语言中,对负数执行取模运算,结果有可能会是不同的