数组中除一个数字外.其余数字均出现三次

一,思路

 

此时当前时间复杂度位O(N),空间复杂度为O(1)

 

 

 二,具体代码

#include<stdio.h>
int singleNumber(int* nums, int numsSize)
{
    int result=0;
    for(int i=0;i<32;i++)//遍历32位 
    {
        int temp=0;
        for(int j=0;j<numsSize;j++) //对每个数据进行位操作统计得到它的每一位出现的次数 
        {
            temp+=(nums[j]>>i)&1;
        }
        if(temp%3)     //如果%3!=0,通过移位得到结果 
        {
            result+=1<<i;
        }
    }    
    return result;
}
int main()
{
    int nums[]={1,2,2,2,3,3,3}; 
    int numsSize=sizeof(nums)/sizeof(nums[0]);
    int ret=singleNumber(nums,numsSize); 
    printf("%d",ret);
    return 0;    
}

 

posted @ 2022-01-06 11:43  小杜加油  阅读(34)  评论(0)    收藏  举报