算法基础学习笔记--异或运算

本文概述了C语言中异或运算的基本规则,包括与0和自身运算的结果,以及异或运算的交换律和结合律。重点介绍了如何利用异或特性解决数组中特定问题,如查找仅出现一次的数和求最大异或值。同时,提及了LeetCode题目421的应用。

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

简单来说,相同的数异或运算结果为0,不相同的数异或运算结果为1,这里的运算,指的是二进制位的运算。

在解决实际问题时,需要抓住关键的几个特点。
阅读了这篇帖子:C语言异或操作详解(小小异或,大大作用~),把几点总结写在本文。
规律一:任何数和0的异或结果是该数本身,任何数和自己本身的异或结果为0
规律二:异或运算符合交换率和结合率

这里也总结下我认为的该帖中的例题的以及常见例题关键解题思路:
1.相同的数异或结果为0,而0与任意数异或结果为该任意数,因此异或运算可以很方便的在数组中找到指定的一个数
2.针对例题2,当需要找出数组中的两个仅出现一次的数时,可以先对数组所有数异或运算,得出这两个数的异或结果;找到任意一个这个异或结果的二进制位中结果为1(即两个数在这一位的值一个是0,一个是1)的位(方法是:两个数的异或结果x & 负两个数的异或结果-x,即x & -x);然后把原来的数组中,这个对应位二进制结果为0和结果为1的数分成两个新数组,这两个新数组中,均包含着若干出现次数2次的数以及其中一个仅出现一次的数;由规律一,这两个新数组的所有数分别异或,就可以分别得到一个仅出现一次的数。

异或运算另一个性质:
若x异或y=a,则x异或a=y

这里贴上一个leetcode题及题解:
421. 数组中两个数的最大异或值
https://leetcode.cn/problems/maximum-xor-of-two-numbers-in-an-array/description/
https://leetcode.cn/problems/maximum-xor-of-two-numbers-in-an-array/solutions/2652101/wei-yun-suan-zhao-chu-shu-zu-zhong-liang-tiza/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值