Single Number

来源:互联网 发布:网络教育专科学费 编辑:程序博客网 时间:2024/05/21 17:32

1.题目

给出2*n + 1 个的数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字。

给出 [1,2,2,1,3,4,3],返回 4

2.算法

我们知道如果们每个整数出现2次,如果每一位出现1的次数也就是2的倍数,我们统计每一位出现1的次数,最后余2,就可以得到最后的出现一次的数

public int singleNumber(int[] A) {      int[] digits = new int[32];      for(int i=0;i<32;i++)      {          for(int j=0;j<A.length;j++)          {              digits[i] += (A[j]>>i)&1;          }      }      int res = 0;      for(int i=0;i<32;i++)      {          res += (digits[i]%2)<<i;      }      return res;  } 

算法2:我们用异或运算符来解这道题,我们知道如果两个相等的数异或则最后为0,如果0和一个数a,异或,则最后为a,这样我们就可以找到出现一次的数了

   public int singleNumber(int[] A) {        // Write your code here    if (A == null || A.length == 0)    {    return 0;    }    int res = A[0];    for (int i = 1; i < A.length; i++)    {    res ^= A[i];    }    return res;    }


0 0
原创粉丝点击