異或運算( ^ )

給定一個包含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) ;
        }
}

異或運算法則:spa

1^1 = 0code

1^0 = 1blog

0^1 = 1class

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) ;
    }
}    
相關文章
相關標籤/搜索