【题目】
【题目关注点】
位运算:
1、利用位运算判断一个整数是奇数还是偶数。
用i&1判断奇偶,要比用i%2==1来判断大约快4倍。
if(i&1){
//i是奇数情况执行的代码
}
else{
//i是偶数情况执行的代码
}
2、取一个除数是2的正整数次方数的余数。
有时候要做一些取余(模)的运算,而除数恰好是2的次方数常量,可用如下方法:
取i除以4的余数,用:num=i&3
取i除以8的余数,用:num=i&7
取i除以16的余数,用:num=i&15
……依次类推
3、实现对一个数字做除法后再取整(除数是2的正整数次方数)。
有时候算坐标或者算索引之类,方法如下:
比如,把number除以4的结果取整,一般写成int(number/4)
用位运算,写成number>>2即可。
【解答】
class Solution {
public:
vector<int> sumEvenAfterQueries(vector<int>& A, vector<vector<int>>& queries) {
vector<int> answer(A.size());
int sum=0;
for(int j=0;j<A.size();++j){
if(!(A[j] & 1)){
sum = sum + A[j];
}
}
for(int i=0;i<A.size();++i){
int val = queries[i][0];
int index = queries[i][1];
if(A[index]&1){
//A[index]为奇数
if(val&1)
//val为奇数
sum = sum+A[index]+val;
A[index] = A[index]+val;
}
else{
if(val&1)//val为奇数
sum = sum-A[index];
else
sum = sum+val;
A[index] = A[index] + val;
}
answer[i] = sum;
}
return answer;
}
};