只出现一次的数字||
题目描述:
思路:
因为该数组中数字除了出现一次那个数字外,其他数字都出现三次,按位异或显然是不行的,因为都是奇数次,但我们仍然可以用位运算来解决,用一个32位数来统计所有数字在所有位数上出现的次数,那么除了只出现一次的那个数字的位数外,其他位数记录的出现次数都能被3整除,把这些位找出来再与0做或运算即为要找的数字。
代码:
public class Solution {
public int SingleNumber(int[] nums) {
int result=0;
for(int i=0;i<32;i++)
{
int mask=1<<i;
int count=0;
for(int j=0;j<nums.Length;j++)
{
if((nums[j]&mask)!=0)
{
count++;
}
}
if(count%3!=0)
{
result|=mask;
}
}
return result;
}
}
执行结果:
总结
由于存在两层循环来统计每位上的出现次数,所以比较耗时,但内存占用较少。