single number

来源:互联网 发布:云计算技术应用实例 编辑:程序博客网 时间:2024/06/10 00:13

数组中每个元素都出现两次,但是其中一个元素出现一次,求出此元素

class solution{public:    int singlenumber(vecotor<int>&nums){            int x = 0;            for(int i=0;i<nums.size()){                x^=nums[i];            }//题目使用到了,异或的特性,异或时可以去掉重复的元素            return x;    }}

数组中每个元素都出现三次,其中一个元素出现一次,求出此元素

class solution{public:    int singlenumber(vector<int>nums){        const int w = sizeof(int)*8;//求出有多少位        int count[w];        //fill_n(&count[0],w,0);        for (int i = 0; i < nums.size(); i++){            for (int j = 0; j < w; j++)            {   //统计二进制位相对应的位置上是否为1                count[j] = count[j] + (nums[i] >> j) & 1;                count[j] = count[j] % 3;            }        }        int result = 0;        for (int i = 0; i < w; i++)        {//现在二进制数组中只剩下0或者1,然后第i个位置上存在1那么1就左移动多少位置            result += (count[i] << i);        }        return 0;    }};/*    构建一个数组,数组大小为所对应的数字的位的最大值,然后统计每个位置上出现1的个数,然后将出现k次数的    对k取余,这样就可以将此数字给去掉,然后通过数组恢复此数字,每个位置上的1代表权重,然后对应位置上的    元素相左边移动k个位置即可。*/
原创粉丝点击