Single Number
Given an array of integers, every element appears twice except for one. Find that single one.
超时算法:就是设置两个指针,然后比较所指的数字:
int singleNumber(int A[], int n) {
int i,j;
int answer;
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
{
if(i==j)
continue;
else if(A[j]=A[i])
break;
}
if(j==n-1)
{
answer=A[i];
break;
}
}
return answer;
}
算法二:异或。。。
自己和自己异或得到全1,不影响其他的计算,因此只有一个单独的数的话,就用异或很容易得到。
int singleNumber(int A[], int n) {
if (n==0)
{
return 0;
}
int answer,i;
for (i=0;i<n;i++)
{
answer=answer^A[i];
}
return answer;
}
Single Number II
Given an array of integers, every element appears three times except for one. Find that single one.
两个数的话,可以用异或,但是三个数字的话,就无法用该方法,可以考虑所有数字每一位的和,然后再模三。这个方法对其他所有几次的情况都适用~~
class Solution {
public:
int singleNumber(int A[], int n) {
int m[32]={0};
int answer=0;
for(int i=0;i<32;i++)
{
for(int j=0;j<n;j++)
{
m[i]+= (A[j]>>i)&1;
}
answer|=(m[i]%3)<<i;
}
return answer;
}
};