有2n+1个数,其中有2n个数出现过两次,找出其中只出现一次的数

给出2n+1个数,其中有2n个数出现过两次,如何用最简便的方法找出里面只出现了一次的那个数。

例如这样一组数“3,3,100,2,4,2,5,5,4”,其中只有100出现了1次,其他都是出现了2次,如何找出其中的100?

最简便的方法是使用异或,代码如下:

 1 public class Foo {
 2 
 3     public static void main(String[] args) {
 4         int[] arr = { 3, 3, 100, 2, 2, 4, 5, 5, 4 };
 5         int temp = 0;
 6         for (int i = 0; i < arr.length; i++) {
 7             temp ^= arr[i];
 8         }
 9         System.out.println("只重复一次的数字是:" + temp);
10         // 运算效果同上
11         System.out.println("3^3^100^2^2^4^5^5^4="
12                 + (3 ^ 3 ^ 100 ^ 2 ^ 2 ^ 4 ^ 5 ^ 5 ^ 4));
13         // 因为"a^b"和"b^a"结果一样,上边的表达式,和以下等效
14         System.out.println("2^2^3^3^4^4^5^5^100="
15                 + (2 ^ 2 ^ 3 ^ 3 ^ 4 ^ 4 ^ 5 ^ 5 ^ 100));
16     }
17 }

运行结果:

只重复一次的数字是:100
3^3^100^2^2^4^5^5^4=100
2^2^3^3^4^4^5^5^100=100

算法的原理就是:任何数 异或 0值不变,任何数与自己异或值为0。

因此 一个数A 偶数次(2N次,2N>=2) 异或 同一个数B,结果值为A(例如:2^5^5^5^5=2,或 2^5^6^5^6=2)。

参考文章http://blog.csdn.net/zhengzhb/article/details/7289325

转载于:https://www.cnblogs.com/agrimony/p/3244871.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值