题目描述
现在有一个整数类型的数组,数组中素只有一个元素只出现一次,其余的元素都出现两次。
注意:
你需要给出一个线性时间复杂度的算法,你能在不使用额外内存空间的情况下解决这个问题么?
示例1
输入
[复制](javascript:void(0)😉
[1,0,1]
返回值
[复制](javascript:void(0)😉
0
本菜鸡的解题代码
大概思路是暴力对比,暴力就完事了。
二重循环,先提前在外层循环设定一个初始标志,为0,
内存循环 ,如果找到相同的,则将标志设为1。
外层在根据标志判断是否找到相同的,否则返回出不同的值。
public class Solution {
/**
*
* @param A int整型一维数组
* @return int整型
*/
public int singleNumber (int[] A) {
// write code here
for (int i = 0; i<A.length ;i++) {
int hasSame=0;
for (int j = 0; j<A.length; j++){
if(i==j){
System.out.println("相同索引 A["+i+"]="+A[i]+" ,i="+i+", j="+j);
continue;
}
if(A[i]==A[j]){
hasSame=1;
break;
}
}
if(hasSame==0){
return A[i];
}
}
return 0;
}
}
大佬的代码
链接:https://www.nowcoder.com/questionTerminal/0bc646909e474ac5b031ec6836a47768
来源:牛客网
根据异或运算特点:
两个相同的数进行异或,结果为0
public static int singleNumber(int[] A) {
int num = 0;
for(int i=0;i<A.length;i++){
num^=A[i];
}
return num;
}
其实只要记住:
1.异或满足交换律。
2.相同两个数异或为0。
3.0异或一个数为那个数本身。
最后结果即出现1次的那个数。