您的位置:首页 > 其它

Leetcode: single-number && single-number-ii

2018-01-07 10:47 369 查看
Given an array of integers, everyelement 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^a = a。a^a = 0。a^b^a = a^a^b = b^a^a = b。

由上述公式可知,偶数个相同的数相异或为0,任何数和0异或为其本身,所以只需将数组里的数异或一次,最后得到的数就是唯一出现的数。

代码:

int singleNumber(int A[], int n) {
int num=0;
for(int i=0; i!=n; i++)
num ^= A[i];
return num;
}
Leetcode: single-number-ii

Given an array of integers, everyelement 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?

思路:将数组的每个数按位计算每位出现的次数,因为数组里的数除了一个只出现一次,其它的数都出现3次,那么计算每个数的每位出现的次数不是3的倍数就是mod 3为1。mod 3为1的那一位必定是只出现一次的数的那一位。

代码:

int singleNumber(int A[], int n) {
int tmp=1;
int num=0;
for(int i=0; i!=32; i++)
{
int count=0;
for(int j=0; j!=n; j++)
{
if(A[j]&(tmp<<i))
count++;
}
if(count%3)
num |= (tmp<<i);
}
return num;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: