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?
使用额外空间,hash
public static int singleNumber(int[] nums)
{
HashSet<Integer> hashset=new HashSet<>();
long sum=0;
for(int n:nums)
if(!hashset.contains(n))
{
hashset.add(n);
sum+=2*(long)n;
}
else {
sum-=n;
}
return (int) (sum/2);
}
http://blog.youkuaiyun.com/jiadebin890724/article/details/23306837
int 数据共有32位,可以用32变量存储 这 N 个元素中各个二进制位上 1 出现的次数,最后 在进行 模三 操作,如果为1,那说明这一位是要找元素二进制表示中为 1 的那一位。代码如下:
时间:O(32*N),这是一个通用的解法,如果把出现3次改为 k 次,那么只需模k就行了。