巧用异或找出唯一数字(多解)

题目LeetCode136

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

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

示例

**输入:**nums = 2,2,1

**输出:**1

Python解法

代码示例(位运算)

python 复制代码
class Solution:
    def singleNumber(self, nums: List[int]) -> int:

        res = 0

        for num in nums:
            res = res ^ num

        return res

代码解释

异或运算规则:

a ^ a = 0(相同数字异或为 0)

a ^ 0 = a(数字和 0 异或等于自身)

满足交换律、结合律,运算顺序不影响结果

res ^= num 是复合赋值运算符,等同于 res = res ^ num。

示例 1:nums = 2, 2, 1

初始状态:res = 0

  1. 第一轮循环,num = 2res = 0 ^ 2 = 2

  2. 第二轮循环,num = 2res = 2 ^ 2 = 0 两个相同数字抵消,结果变回 0

  3. 第三轮循环,num = 1res = 0 ^ 1 = 1

循环结束,返回 1,就是答案。

过程展示

Java解法

代码示例(位运算)

java 复制代码
class Solution{
    public int singleNumber(int[] nums){
        int res = 0;
        for(int num: nums){
            res = res ^ num;
        }
        return res;
    }
}

C++解法

代码示例(位运算)

cpp 复制代码
class Solution{
public:
    int singleNumber(vector<int>& nums){
        int res = 0;
        for(int num: nums){
            res = res ^ num;
        }
        return res;
    }
};
相关推荐
luj_17688 小时前
残熵算法实时化三大瓶颈突破
c语言·开发语言·网络·经验分享·算法
我命由我123458 小时前
Android Studio - Android Studio 自定义预览尺寸
android·java·ide·java-ee·android studio·android-studio·android runtime
充钱大佬8 小时前
Python测试基础教程
python·log4j·apache
mCell9 小时前
你以为短链接只是 Hash + 301/302?
后端·算法·架构
咖啡八杯9 小时前
GoF设计模式——迭代器模式
java·后端·设计模式·迭代器模式
AIGS0019 小时前
企业AI落地的关键认知:向量空间JBoltAI的本体语义平台
java·人工智能·人工智能ai大模型应用
码少女10 小时前
数据结构——哈希表的基础
数据结构·散列表
KaMeidebaby10 小时前
卡梅德生物技术快报|抗体亲和力成熟工业化调控新机制:差异性浆细胞增殖工艺优化思路
java·开发语言·人工智能·算法·机器学习·架构·spark
luj_176811 小时前
心形曲线轨迹控制三大关键技术
c语言·开发语言·c++·经验分享·算法
初心丨哈士奇11 小时前
Python 四大基础容器|列表篇
python