异或运算解答经典例题

本文介绍了异或运算在计算机中的基本概念,如何在编码和加密中发挥作用,以及如何利用异或运算的特性解决编程中的问题,如寻找数组中只出现一次的元素。提供了两种线性时间复杂度和常数空间的解决方案:一种基于异或操作,另一种则是基于计数统计。

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

异或运算,也称为「按位异或」,是计算机中常见的一种位运算操作。异或是一种二进制运算,用符号 ^ 表示,其计算规则是对二进制数进行逐位运算,当两个二进制数的当前位不同时,位运算结果为 1,否则为 0。

举个例子,设二进制数 a=101101,b=010110,则 a^b 的结果为:

  101101
^ 010110
---------
  111011

二进制的加法运算规则中,每一位只会对应进位或不进位两种情况,而异或运算的结果恰好把这两种情况都包含进去了。因此异或运算在计算机中被广泛使用,尤其是在编码和加密方面。

在编程中,异或运算还有一些其他的特性:

  • 一个数再次与自身异或的结果是 0。
  • 异或运算满足「交换律」和「结合律」,即 a^b^c = (a^b)^c = a^(b^c)。
  • 异或运算可以用来交换两个变量的值,而且不需要借助第三个变量,只需进行两次异或运算即可。例如:a = a^b, b = a^b, a = a^b。

力扣经典题目:

给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。

实现代码:

class Solution:

    def singleNumber(self, nums: List[int]) -> int:

        aa = 0

        for i in nums:

            aa = aa ^ i

        return aa

例题升级版,

给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。

你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。

同样可以用异或方法解答:

class Solution:

    @staticmethod

    def singleNumber(nums):

        a, b = 0, 0

        for x in nums:

            b = (b ^ x) & ~a

            a = (a ^ x) & ~b

        return b

异或看不懂,可以用其他办法解决:

class Solution:

    def singleNumber(self, nums: List[int]) -> int:

        num_count = {}

       

        # 统计每个数字出现的次数

        for num in nums:

            num_count[num] = num_count.get(num, 0) + 1

       

        # 找出只出现一次的数字

        for num, count in num_count.items():

            if count == 1:

                return num

       

        # 如果没有找到,则返回0(这里可以根据实际情况选择其他默认值)

        return 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值