【牛客网】single-number系列题解

来源:互联网 发布:盛世全集网络剧百度云 编辑:程序博客网 时间:2024/06/05 07:33

题目

给定一个整型数组,除一个元素仅出现一次之外,其余每个元素都出现两次(三次),试着找出这个元素。

分析

此类题目,若每个元素出现i次,如果将问题的视角放在数据位上来看的话,实际上就是除那个“single number”所在的bits外,(每个bit上出现数据的次数)%i==0。

代码

1.两次:
a.常规思路:

class Solution {public:    int singleNumber(int A[], int n) {        int res=0;        for(int i=0;i<32;i++){            int count=0;            for(int j=0;j<n;j++){                if((A[j]>>i)&1 == 1)                    count++;            }            res+=(count%2)<<i;        }        return res;    }};

b.Bright Way:异或,a^a=0, 0^a=a(此方法适用于每个数出现偶数次的情况)

class Solution {public:    int singleNumber(int A[], int n) {        int num = 0;        for(int i=0;i<n;i++){            num^=A[i];        }        return num;    }};

2.三次:

class Solution {public:    int singleNumber(int A[], int n) {        int res=0;        for(int i=0;i<32;i++){            int count=0;            for(int j=0;j<n;j++){                if((A[j]>>i)&1 == 1)                     count++;            }            res+=(count%3)<<i;        }        return res;    }};
0 0
原创粉丝点击