目标结果为4,只有4出现了一次,其他均为两次
public class TestDemo{
public static void main(String[] args) {
int []array={1,2,5,9,8,7,4,1,2,5,9,8,7};
int num=searchNumber(array);
System.out.println(num);
}
public static int searchNumber(int []array){
int j=0;
int i=0;
for ( i=0;i<array.length;i++){
int count=0;//每次i的遍历将count赋值为0,进行判断
for (j=0;j<array.length;j++) {//进行两次for循环把a[i]和去掉下标为i的a[j]进行比较
if ( i==j)//挖去i==j这一个元素 防止出现每次循环都能找到一个与其相等的值
continue;//跳出本次循环继续下一次循环
if (array[i] == array[j]){
count++;
break;//如果找到了相等的元素,则不是要求的数字,跳出该层循环
}
}
if(count==0)//如果遍历完后count仍然为则为要求的数字
return array[i];
}
return 0;
}
}
输出结果为:4
还有另一种方法用到了位运算,也做一下介绍,位运算代码更加简洁,但是需要用到^异或操作符。
public static int searchNumber(int []array) {
int i=0;
int sum=0;
while (i<array.length){
sum=sum^array[i];//这里用到了结合率,相当于从第一个元素一直异或到最后一个元素,结合律:a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c 另外a^a=0,0^n=n
i++;
}
return sum;
}
可以看到这里的结果也是4,位操作符比较简单,但是需要对位运算比较熟悉。