【LeeCode做题日记(C/C++)--简单】985题:查询后的数据和

这篇博客介绍了如何使用位运算解决LeetCode第985题,重点讨论了位运算在判断奇偶、取余和除法取整中的应用,提供了高效解题思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【题目】

 
【题目关注点】

位运算:

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;
    }
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值