1、来源:点击打开链接
2、题目:
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?
int singleNumber(int* nums, int numsSize) {
int n=((numsSize+1)/2);
int *f=(int*)malloc(sizeof(int)*n);
int *nums2=(int*)malloc(sizeof(int)*n);
int i=0,j=0,k=0;
for(i=0;i<n;i++)
f[0]=0;
for(i=0;i<numsSize;i++){
int flag=0;
for(j=0;j<k;j++){
if(nums[i]==nums2[j]){
f[j]++;
flag=1;
break;
}
}
if(flag==0){
f[j]++;
nums2[j]=nums[i];
k++;
}
}
int a=-1;
for(i=0;i<n;i++){
if(f[i]==1){
a=nums2[i];
break;
}
}
return a;
}
4、讨论区的代码(点击打开链接):
理解,例如有a,b,c三个数,下面为他们的二进制进行^运算:
1001
0101
1001
在同一个位中,最后出现的总是奇数个的值
int singleNumber(int A[], int n) {
int result = 0;
for (int i = 0; i<n; i++)
{
result ^=A[i];
}
return result;
}