您的位置:首页 > 其它

leetcode 137 Single Number II

2015-07-14 22:52 225 查看
题意:类似之前的有一道题,这次是一个数组中所有数字都出现三次,唯独有一个不是,找出这个数字。

思路:懵了,按位异或对出现两次可以很好的解决问题,但是三次就直接废了。想半天没办法,看到讨论区里别人的一个解法超级简单,就是用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;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: