【LeetCode】002 Single Number 寻找单身狗

【题目】

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

在一个数组中​,每个数字都有另一个与之相同,只有一个例外,请找出它。

【解析】

一、我的方法(即最笨的方法):

把每个数字都检索一遍,检索不到相同的就输出。​

​从数组第一个数字开始,从后往前检索,一直到被检索数字,如果发现两个数字编号相同则输出。否则检索数组的第二个数字,以此循环。

程序如下:​

int singleNumber(int* nums, int numsSize) {

    if(numsSize==1)

    return nums[0];

    else

    for(int i=0; i

    {

        for(int j=numsSize-1; j>i; j--)

        if(i==j)

        return nums[i];

    }

}​​​​​

二、Genius的办法(评论是这么说的,看完我也表示只有这个词可以形容。。。)

先是百度百科:

异或,英文为exclusive OR,或缩写成xor

异或是一个数学运算符。它应用于逻辑运算。异或的数学符号为“⊕”,计算机符号为“xor”。

其运算法则为:a⊕b = (¬a ∧ b) ∨ (a ∧¬b)

如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。

​过程:

令result变量为0,将它与数组中每个量进行异或运算,再赋值给result。一个数与0异或仍是它本身,两个相同的数异或为0。因此,如果result和两个相同的数异或之后,则值不变,仍为0。又因为异或运算满足交换律,因此最后result的值即为只进行了一次异或运算的数,即我们要找的单身狗。

Genius!!​

【程序】​

int singleNumber(int* nums, int numsSize) {

    int result = 0;

    for(int i=0; i

        result^= nums[i];

    return result;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值