Single Number II

先附上我的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内元素全部赋值后再给迭代器赋值,不然可能会出错。


参考:

http://blog.csdn.net/doc_sgl/article/details/12259807 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值