[leetcode 136] Single Number

19 篇文章 0 订阅

Question:

Given an array of integers, every element appears twice except for one. Find that single one.

Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?


分析:

给定一个整数数组,其中数组内的所有数据元素(除了一个以外)都出现2次,找到这个出现一次的数据;

要求时间复杂度为O(n),空间复杂度为O(1)

可以知道,如果数组为空,返回0;

若不为空,可以采用位异或运算;

异或运算介绍:二进制下用1表示真,0表示假,则异或的运算法则为:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1)

如果A = 2,B=3 则A^B = 010 ^ 011 = 001;

所以如果从第一个元素开始到最后一个元素采用异或运算,遇到相同的数据元素会中和为0,最后只会剩下出现1次的数据无法被中和为0;


所以代码如下:

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int res = 0;
        for (int n : nums) 
            res ^= n;
        return res;
        
    }
};




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值