先附上我的code:
class Solution {
public:
int singleNumber(int A[], int n) {
map<int,int> counter;
for(int i=0;i<n;i++)
if(counter.find(A[i])==counter.end())
counter[A[i]]=1;
else
counter[A[i]]++;
map<int,int>::iterator iter = counter.begin();
while(iter!=counter.end()){
if(iter->second==1)
return iter->first;
iter++;
}
}
};
一开始看到这题马上就想到最简单的暴力遍历方法,但是看到题目有一行 Could you implement it without using extra memory?就觉得这是一道智力题了。因为没搞过ACM对这种题不感冒想了一下想不出来就百度答案,发现最常用的的就是什么用位来mod3,感觉很巧妙的,但是看了很多篇博客讲解都看不懂,拜托写得明白一点会死么。无意之中看到一篇[1]用map容器进行暴力检索的,然后自己就按着这思路写了一个,妥妥通过了。这次虽然简单但是让我感觉到了C++ STL的威力,也对何时改用什么数据结构有了进一步的熟悉,收获颇大(感觉比弄懂那些用位mod3投机取巧的方法好多了)。一个大牛说过当你没什么想法的时候就用最简单暴力的方法吧这句话果然没错:)。
PS:map的迭代器最好是等map内元素全部赋值后再给迭代器赋值,不然可能会出错。
参考: