首页 > 其他 > 详细

异或运算( ^ )

时间:2015-04-21 20:03:27      阅读:230      评论:0      收藏:0      [点我收藏+]

给定一个包含n个整数的数组,除了一个数出现一次以外,其他数均出现两次,找出这个出现一次的整数

思路:运用异或运算,暴力,快速……

public class SingleNumber       {
        public static int singleNumber(int[] A) {
                int x = 0 ;
                for(int a:A)
                        x = x ^ a ;
                return x ;
        }
        public static void main(String[] args)  {
                int A[] = {1,1,4,4,2,3,3} ;
                int s = singleNumber(A) ;
                System.out.printf("%d\n",s) ;
        }
}

异或运算法则:

1^1 = 0

1^0 = 1

0^1 = 1

0^0 = 0

 

另外一种方法:

public class SingleNumberII    {
    public static int Solve(int A[])    {
        int sum = 0 ;
        for(int i = 0 ; i < 32 ; i++)    {   //  统计每一位“1”的个数
            int count = 0 , d = 1 << i ;
            for(int a:A)
                count += (a >> i) & 1 ;  // 取出最低位
            if(count % 2 > 0)               //  去除出现两次的整数
                sum |= d ;
        }    
        return sum ;
    }
    public static void main(String[] args)    {
        int[] A = {1,1,2,2,3,3,5} ;
        int x = Solve(A) ;
        System.out.printf("%d\n",x) ;
    }
}    

 

给定一个包含n个整数的数组,除了一个数据没有出现三次,其他数据都出现三次,找出这个整数

public class SingleNumberII    {
    public static int Solve(int A[])    {
        int sum = 0 ;
        for(int i = 0 ; i < 32 ; i++)    {   //  统计每一位“1”的个数
            int count = 0 , d = 1 << i ;
            for(int a:A)
                count += (a >> i) & 1 ;
            if(count % 3 > 0)               //  去除出现三次的整数
                sum |= d ;
        }    
        return sum ;
    }
    public static void main(String[] args)    {
        int[] A = {1,1,1,2,2,2,3,3,3,5} ;
        int x = Solve(A) ;
        System.out.printf("%d\n",x) ;
    }
}    

 

异或运算( ^ )

原文:http://www.cnblogs.com/scottdinggo/p/4444992.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!