Single Number
Given an array of integers, every element appears twice except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
public class Solution {
public int singleNumber(int[] A) {
for(int i=0,k=0;i<A.length;i++)
{
for(int j=i+1;j<A.length-i;j++)
{
if(A[i] == A[j]){
A[j]=A[A.length-1-i];
k=1;
break;}
}
if(k==1)
{
k=0;
}else
return A[i];
}
return 0;
}
}
public class Solution {
public int singleNumber(int[] A) {
for(int i=0,k=0;i<A.length;i++)
{
for(int j=i+1;j<A.length-i;j++)
{
if(A[i] == A[j]){
A[j]=A[A.length-1-i];
k=1;
break;}
}
if(k==1)
{
k=0;
}else
return A[i];
}
return 0;
}
}
Submission Result: Time Limit Exceeded
没想出来怎么在线性时间内完成,参考网上代码:1. 异或运算是可交换,即 a ^ b = b ^ a
2. 0 ^ a = a
Java代码:
public class Solution {
public int singleNumber(int[] A) {
for(int i=1,k=0;i<A.length;i++)
A[0] = A[0]^A[i];
return A[0];
}
}
这个算法太牛逼了!!
public class Solution {
public int singleNumber(int[] A) {
for(int i=1,k=0;i<A.length;i++)
A[0] = A[0]^A[i];
return A[0];
}
}