LeetCode Single Number2

Description

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?

The original problem is here.

The original code is here.

My Solution

I solve this problem in C++, as below:

/*
*Single Number
*Author: shuaijiang
*Email: zhaoshuaijiang8@gmail.com
*/
#include<iostream>
#include<vector>
#include<map>
#include<stdlib.h>
using namespace std;

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        if(nums.size() <= 0)
            return 0;
        map<int,int> nums_map;
        map<int,int>::iterator mapIter;
        vector<int>::iterator iter;
        for(iter=nums.begin();iter<nums.end();++iter){
            int num = *iter;
            if(nums_map.find(num) == nums_map.end())
                nums_map[num] = 1;
            else
                nums_map[num] += 1;
        }
        for(mapIter=nums_map.begin();mapIter!=nums_map.end();++mapIter){
            if(mapIter->second == 1)
                return mapIter->first;
        }
        
    }
};

Note

In this solution, a hash is needed(map in C++ ). We traverse the array of numbers, and put each unique number and its frequence to the hash. Then, we can get the number whos frequence is one.