看到最近博客公园很多应届毕业生面试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语言哈!