首页 > 编程知识 正文

二进制逻辑运算法则,java异或两次

时间:2023-05-03 08:26:11 阅读:16753 作者:4845

看到最近博客公园很多应届毕业生面试bae成功的经历,我由衷钦佩,感叹不已。 付钱一定会有回报。 于是我也急着想找几个面试的主题。 我不小心看到了这个主题。

一个数组包含2n 1个整数。 其中,n个个数出现了2次,1个个数出现了1次。 出现一次的数量是多少?

我想了很久,才知道我是个笨蛋。 百度给出了答案,说只要对所有的数进行一次异或就可以了。 我恍然大悟,想马上用java实现一下。 出乎意料的是结果完全不正确。 以为自己写错了代码,百度也写了异或符号^是正确的还是符号正确的? 但是,度娘说java没有二进制的类型。 唯一要乘二进制数的,就是把int转换为string才表示二进制数。 这个怎么办? 你认为对私人的我来说,必须自己定义Binary类吗? 几经周折,终于出来了!

packagecom.test.main; 公共类二进制//定义二进制例程

隐私二进制; 接收//int类型并转换为字符串;

binary(inta ) this.binary=integer.tobinarystring ) a;

接收用于生成Binary对象的字符串型二进制文件

binary(strings ) {this.binary=s;

}publicbinaryxor(binaryx ) {

String anotherBinary=x.binary;

String thisBinary=this.binary;

字符串模板;

字符串结果; intlength;

length=this binary.length (-another binary.length ); //keepthisbianry ' slengthisnotshorterthananotherbnary;

if (长度0 ) {

temp=thisBinary;

thisBinary=anotherBinary;

anotherBinary=temp;

length=-length;

//剪下出现很多长字符串的地方

if (长度0 ) {

result=thisbinary.substring(0,length );

}else{

result=' ';

}for(intI=0; I

if(thisbinary.Charat(Ilength )==anotherBinary.charAt(i ) )

result='1'; else{

result='0';

}

构建Binary对象

binaryb=newbinary(result ); 返回网络;

}

}

以上是定义的二进制类,可以进行异或操作,但实际上也可以进行其他and和and操作,这里不麻烦。

1 publicstaticvoidmain (string [ ] args )2int [ ] arr={ 1,1,2,2,3,4,4,4,5,5,6,7,8 } 3二进制4for(intI=1; I

9 }

以上是为我测试的代码。 也就是说,如果数组包含偶数个整数,并且只有一个整数是奇数个整数,则可以找到这个奇数。 最后打印的是奇数的二进制格式。 其实最后我应该写的方法是,把二进制转换成int .实现应该比较简单。

最后补充一下,其实这样做效率很低。 每个string的位操作,其中也有string“”的语句,其实效率很低。 我只是为了实现而实现的。 实际上还是用hashmap记录下各个数出现的次数,拿出奇数次就可以了。 如果再慢的话,直接用c语言哈!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。