java机械_用java实现异或操作

这篇博客介绍了一种解决面试题目的方法:在包含重复数字的数组中找到唯一出现一次的数字。作者通过使用Java自定义二进制类`Binary`实现了异或操作,虽然效率较低,但能完成任务。实际应用中,更高效的解决方案是使用HashMap记录数字出现的次数,找出出现奇数次的数。
摘要由CSDN通过智能技术生成

最近看了博客园的很多应届生面试bae成功的经历,由衷的佩服和满满的感叹:付出总有回报。于是自己也心痒痒想找几分面试题目做做。无意间看到了这道题目。

一个数组存放了2n+1个整数,其中有n个数出现了2次,1个数出现了1次,找出出现1次的数是多少?

我想了很久没想出来,可见我很笨,百度了下答案,说只要对所有数异或一遍即可。恍然大悟,于是马上想在java上实现一下。不料结果根本不是正确的。一直以为是自己写错代码了,还百度了下异或的符号^到底对不对,符号是对了,可是度娘说java没有二进制类型,唯一跟二进制搭上边的,只有把int转成string来勉强表示二进制数。这可如何是好,对于我这种菜鸟来说,觉得何不自己定义一个Binary类呢?几经波折,终于还是出来啦!

packagecom.test.main;public classBinary {//define a binary instance

privateString binary;//接收int类型,转换成String;

Binary(inta){this.binary=Integer.toBinaryString(a);

}//接收String类型的二进制,用于构造Binary对象

Binary(String s){this.binary=s;

}publicBinary xor(Binary x){

String anotherBinary=x.binary;

String thisBinary=this.binary;

String temp;

String result;intlength;

length=thisBinary.length()-anotherBinary.length();//keep thisBianry's length is not shorter than anotherBnary;

if(length<0){

temp=thisBinary;

thisBinary=anotherBinary;

anotherBinary=temp;

length=-length;

}//截取较长字符串多出来的那一段

if(length>0){

result=thisBinary.substring(0, length);

}else{

result="";

}for(int i=0;i

if(thisBinary.charAt(i+length)==anotherBinary.charAt(i))

result+="1";else{

result+="0";

}

}//构造Binary对象

Binary b=newBinary(result);returnb;

}

}

以上为为定义的二进制class,能实现异或操作,其实其他的与和并操作都可以实现,在此不累赘了。

1 public static voidmain(String[] args) {2 int[] arr={1,1,2,2,3,3,4,4,4,4,5,5,6,6,7,7,8,8,8};3 Binary sum=new Binary(arr[0]);4 for(int i=1;i

9 }

上述为我测试的代码,即只要数组含有偶数个整数,而只有一个是奇数个的整数,就能把这个奇数找出来,最后打印出来的是奇数的二进制形式,其实最后我该写的方法,把二进制转换成int的.实现应该比较简单。

最后补充一句,其实这样做效率是很低的,要对每一个string的位操作,其中还有string+“”的语句其实很低效,我只是为了实现而实现罢了,实际还是用hashmap记录每个数出现的次数,把奇数次的拎出来就可以了,再嫌慢的话,直接用c语言哈!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值