美文网首页
面试题40:数组中只出现一次的数字

面试题40:数组中只出现一次的数字

作者: liuqinh2s | 来源:发表于2019-03-26 09:26 被阅读0次

    这一题最关键的点在于,使用异或之后得到的是两个数的异或结果,如何区分开这两个数呢?
    答案是,根据异或结果的一个为1的比特位,就可以把整个数组分为两组,这两组分别含有一个不同的数。在对分别对这两组数进行异或就能提取出唯一数了。

    //num1,num2分别为长度为1的数组。传出参数
    //将num1[0],num2[0]设置为返回结果
    public class Solution {
        public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]) {
            int xor = 0;
            for(int i=0;i<array.length;i++){
                xor^= array[i];
            }
            int mask = 1;
            while((xor&mask)==0){
                mask<<=1;
            }
            num1[0]=0;
            num2[0]=0;
            for(int i=0;i<array.length;i++){
                if((array[i]&mask)==0){
                    num1[0] ^= array[i];
                }else{
                    num2[0]^=array[i];
                }
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:面试题40:数组中只出现一次的数字

          本文链接:https://www.haomeiwen.com/subject/plgvvqtx.html