leetcode 137 Single Number II
2015-07-14 22:52
225 查看
题意:类似之前的有一道题,这次是一个数组中所有数字都出现三次,唯独有一个不是,找出这个数字。
思路:懵了,按位异或对出现两次可以很好的解决问题,但是三次就直接废了。想半天没办法,看到讨论区里别人的一个解法超级简单,就是用set存一下这个数组,都变成了只出现一次的数字,整体求和乘3,减去原数组的和乘3的结果,剩下的就是我们要找的那个数的两倍了,除2得出结果。
但是我并不想这么简单的搞定这个问题,通过他的方法给我的启发就是再次利用起set这个容器,我发现set有一个count的函数,是用来统计容器中某个数字出现的次数,但是搞笑的是set的特点是让每个数字只出现一次。然而,转机来了,set有个好兄弟叫multiset,这个容器跟set几乎一样只是它允许数字出现多次,同时也有count这个函数,问题解决。
代码:
思路:懵了,按位异或对出现两次可以很好的解决问题,但是三次就直接废了。想半天没办法,看到讨论区里别人的一个解法超级简单,就是用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; } } }
相关文章推荐
- 【Java】位运算的其他问题
- js_study
- 【架构设计】MVP与MVC,实现Android应用层开发
- 求一个二叉搜索树中第K个最小值
- 抽象类与接口学习小结
- Linux的SOCKET编程详解
- 轮换
- 手机玩召回 被逼急的厂商还能出哪些怪招
- jsp页面导出功能,ajax异步导出,友好提示
- 转方阵
- dismissViewController实现多个模态视图跳转
- 【算法34】蓄水池抽样算法 (Reservoir Sampling Algorithm)
- 杭电 hdu 2544 最短路 (最短路径 + Dijkstra算法)
- 用JAX-WS在Tomcat中发布WebService
- 用gradle编译任意结构的Android项目
- leetcode Roman to integer
- CALayer的使用
- as3.0中为TextField的文字添加样式
- jquery.validate使用攻略
- NYOJ166 小珂的数学题(数位dp)