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?
题目一:给出数组中只出现一次的整数(其他整数都出现两次)
这个还是比较简单的,不用将所有元素与其他元素都循环比较,只要扫描一遍,从第一个异或到最后一个就得到结果了,因为相同的数组异或以后必然为0.代码如下:
class Solution {
public:
int singleNumber(int A[], int n) {
if(n ==1)
{
return A[0];
}
int retnum = A[0];
for(int i = 1; i < n; i++)
{
retnum ^= A[i];
}
return retnum;
}
};
Single Number II
Given an array of integers, every element appears three times except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
稍复杂,不过出现多少次都是整数,只要将整数中的各个位中1出现的次数%3,得到的结果便是最后剩下的那一个整数。
class Solution {
public
int singleNumber(int A[], int n) {
int bitnum[32]={0};
int ret=0;
for(int i=0; i<32; i++){
for(int j=0; j<n; j++){
bitnum[i]+=(A[j]>>i)&1;
}
ret|=(bitnum[i]%3)<<i;
}
return ret;
}
};