只出现一次的数字(位运算)

一.题目分析

题目链接https://leetcode.cn/problems/single-number/?envType=study-plan-v2&envId=top-100-liked

虽然这道题看起来十分简单,但是做起来也不难。可以有很多种方法,不过这里我们讲一个比较特殊的方法————位运算。我们在这个题目要使用异或运算符‘^’,我们可以先了解一下这个运算符的特性:
1.运算规则

2.性质

通过异或的运算规则和性质可以得出,在把一堆数通过异或运算后,可以通过自反性把相同的两个数单独运算,因为两个相同的数异或后为1,所以可以把两个相同的数消去。既然这样,我们就可以知道如何通过这种方式解决题目了。

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int ret=0;
        for(int i=0;i<nums.size();i++)
        {
            ret^=nums[i];
        }
        return ret;
    }
};

具体代码如图。把是所有数组中的数异或后,相同的两个数变成1,只剩下那个单独的数,这样就求出了答案。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值