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?
这跟找单数一差不多,只是添加了一些小技巧,具体代码如下:
class Solution {
public:
int singleNumber(int A[], int n) {
map<int,int> arr;
int index = 1; //表示插入的次数
for (int i = 0;i<n;i++)
{
if(arr.empty())
arr.insert(pair<int,int>(A[i],index)); //第一个数当然要添加到map中
else
{
map<int,int>::iterator itr = arr.find(A[i]);
if(itr!=arr.end())
{
int index = itr->second; //看已经添加的次数
if(index<2) //如果是一次,那就再次添加
{
arr.erase(A[i]); //要先把原来的删掉,这样才能更新index
arr.insert(pair<int,int>(A[i],2));
}
else if(index<3) //如果已经两次了,那就删除
arr.erase(A[i]);
}
else
arr.insert(pair<int,int>(A[i],1)); //要是没有添加过,那就第一次添加,这时候的index是1
}
}
int result = arr.begin()->first;
return result;
}
};