Question
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?
Solution
int compare( const void* a, const void* b)
{
int int_a = * ( (int*) a );
int int_b = * ( (int*) b );
if ( int_a == int_b ) return 0;
else if ( int_a < int_b ) return -1;
else return 1;
}
int singleNumber(int* nums, int numsSize) {
qsort( nums, numsSize, sizeof(int), compare );
int i;
for (i = 0; i < numsSize; i+=2) {
if (nums[i]!=nums[i+1]) {
return nums[i];
}
}
return nums[numsSize-1];
}
Solution best of others(bit manipulation)
异或消除相同的位,剩下的就是single number
int singleNumber(int* nums, int numsSize) {
int x = 0;
while (numsSize--)
{
x ^= nums[numsSize];
}
return x;
}