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

题目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;
    }
};
相关推荐
J2虾虾1 小时前
Spring AI Alibaba - 智能体作为工具(Agent Tool)
java·人工智能·spring
铁链鞭策大师1 小时前
javaEE之多线程(2)
java·前端·java-ee
Devin~Y1 小时前
从内容社区到AIGC客服:Spring Boot、Redis、Kafka、K8s、RAG的三轮大厂Java面试对话(附标准答案)
java·spring boot·redis·spring cloud·kafka·kubernetes·micrometer
hef2881 小时前
Python内置函数从入门到实战:list、open等核心用法全解析
python
七老板的blog1 小时前
【Agent智能体】 任务规划工作流
python·学习·ai·开源
weixin199701080161 小时前
[特殊字符] 【性能提升300%】仿1688首页的Webpack优化全记录(附构建分析Python脚本)
前端·python·webpack
代码小书生1 小时前
getpass,一个安全输入的 Python 库!
开发语言·python·安全
それども1 小时前
怎么理解TCP的状态
java·网络·网络协议·tcp/ip·dubbo
Xzh04231 小时前
Redis黑马点评 实战复盘与面试高频考点详解
java·数据库·redis·面试