leetcode 137 Single Number II

题意:类似之前的有一道题,这次是一个数组中所有数字都出现三次,唯独有一个不是,找出这个数字。

思路:懵了,按位异或对出现两次可以很好的解决问题,但是三次就直接废了。想半天没办法,看到讨论区里别人的一个解法超级简单,就是用set存一下这个数组,都变成了只出现一次的数字,整体求和乘3,减去原数组的和乘3的结果,剩下的就是我们要找的那个数的两倍了,除2得出结果。

但是我并不想这么简单的搞定这个问题,通过他的方法给我的启发就是再次利用起set这个容器,我发现set有一个count的函数,是用来统计容器中某个数字出现的次数,但是搞笑的是set的特点是让每个数字只出现一次。然而,转机来了,set有个好兄弟叫multiset,这个容器跟set几乎一样只是它允许数字出现多次,同时也有count这个函数,问题解决。

代码

int singleNumber(vector<int>& nums) 
{
    multiset<int> s(nums.begin(),nums.end());
    multiset<int>::iterator i;
    for(i = s.begin();i!=s.end();i++)
    {
        if(s.count(*i)!=3)
        {
            return *i;
            break;
        }
    }
}
原文地址:https://www.cnblogs.com/puyangsky/p/4646816.html