Java算法之单身汉

原创技术文章,转载请注明:转自http://newliferen.github.io/

问题描述:有一个整形数组,数组中只有一个元素出现一次,其他元素都出现两次,写一个算法,找出这个只出现一次的元素。

Java实现:每个元素与数组中的其他元素(元素自身除外)进行^(异或)运算,结果是0,表示有相同元素,否则表示不存在相同元素。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/**
* @auth zhengzhi.ren
* @date 2015/8/6.
*/

public class Bachelor {

public static void main(String[] args) {
int[] arr = {1,3,4,6,7,1,4,5,6,7};
int len = arr.length;
int tmp;
for (int i=0;i<len;i++) {
tmp = arr[i];
for (int j=0;j<len;j ++) {
if ((tmp^arr[j]) == 0 && i != j){
System.out.println("元素" + tmp + "存在相同元素");
break;
}
if (j == len -1) {
System.out.println("元素" + tmp + "不存在相同元素");
}
}
}
}
}

这种实现方式算法的时间复杂度为n^2,期待有更好的实现方式,降低时间复杂度。