137. Single Number II

来源:互联网 发布:生活网络信托基金产品 编辑:程序博客网 时间:2024/06/15 05:17

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?

第一种方法:使用哈希表,但是空间复杂度是O(N)

class Solution {public:    int singleNumber(vector<int>& nums)     {        unordered_map<int,int>count;        for(int i=0;i<nums.size();i++)            count[nums[i]]++;        for(auto it=count.begin();it!=count.end();it++)            if(it->second==1)                return it->first;        return 0;    }};

第二种方法:使用位操作,计算int32位每位1的个数,它们的个数不是3N就是3N+1,当计数为3N+1时,说明单独的那个数这一位为1。这样就可以拼凑出那个单独的数。

class Solution {public:    int singleNumber(vector<int>& nums)     {        //int length=nums.size();        int result=0;        for(int i=0;i<32;i++)        {            int count=0;            int mask=1<<i;            for(int j=0;j<nums.size();j++)            {                if(mask&nums[j])                    count++;            }            if(count%3==1)                result=result|mask;        }        return result;        return 0;    }};
0 0
原创粉丝点击