算法总结——异或运算

异或运算

总结总结一些算法,也方便自己回顾,定时更新。

运算规则相同取0,相异取1
在这里插入图片描述

异或算法有三个特征:
1、任何数和0做异或运算,结果仍然是原来的数,即a ⊕ 0 = a。
2、任何数和自身做异或运算时,结果是0,即a ⊕ a=0 。 注意a ⊕ a ⊕ a = a
3、异或运算满足交换律和结合律,即a ⊕ b ⊕ b = b ⊕ a ⊕ b = a ⊕ ( b ⊕ b ) = a ⊕ 0 = a

运用场景: 比如求一组数据中只有一个数字是奇数项其他都是偶数项,怎么找出它,用异或就很方便。

//在这里贴一段伪代码,就是找出唯一的奇数项,满足了时间和空间复杂度
class Solution {
public:
    int singleNumber(vector<int>& nums) {
        //异或运算
        int set=0;
        for(auto iter:nums) set^=iter;
        return set;
            
    }
};

(ps:大家理解一下思想就好了,不要碰到这种情况时去无脑排序遍历,或者再开n空间复杂度。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值