No.6 Single Number II 一组数都出现n次除了某个数,找出这个数
2015-11-01 15:19
417 查看
leetcode题目:一个数组中除了一个数字其他的都是出现3次,请找出这个数字。
实现用位处理!!
一个数字出现三次,则其对应的二进制位也出现3次;
则对于二进制位不是3的整数倍的数出现的次数不为3;
2、极品程序员
在leetcode这道题目的讨论区看到这种用隐码解的代码,理解起来稍微复杂一些。仅供参考,贴下来提醒自己还是一只笨笨的蜗牛,个人还是习惯前面那种温柔式解法。
实现用位处理!!
一个数字出现三次,则其对应的二进制位也出现3次;
则对于二进制位不是3的整数倍的数出现的次数不为3;
class Solution { public: int singleNumber(vector<int>& nums) { int three[32]={0}; for(int i=0;i<nums.size();i++) { for(int b=0;b<32;b++) { if(nums[i] & (1<<b)) three[b]=(three[b]+1)%3; } } int res=0; for(int i=0;i<32;i++) {if(three[i]!=0) res |= (1<<i);} return res; } };
2、极品程序员
在leetcode这道题目的讨论区看到这种用隐码解的代码,理解起来稍微复杂一些。仅供参考,贴下来提醒自己还是一只笨笨的蜗牛,个人还是习惯前面那种温柔式解法。
int singleNumber(int A[], int n) { int ones = 0, twos = 0, threes = 0; for(int i = 0; i < n; i++) { threes = twos & A[i]; //已经出现两次并且再次出现 twos = twos | (ones & A[i]); //曾经出现两次的或者曾经出现一次但是再次出现的 ones = ones | A[i]; //出现一次的 twos = twos & ~threes; //当某一位出现三次后,我们就从出现两次中消除该位 ones = ones & ~threes; //当某一位出现三次后,我们就从出现一次中消除该位 } return ones; //twos, threes最终都为0. ones是只出现一次的数 }
相关文章推荐
- Codestorm:Game with a Boomerang
- 基于opencv的符号提取源代码
- InterView common question
- leetcode@ [209]Minimum Size Subarray Sum
- Codestorm:Game with a Boomerang
- maven的聚合和继承(三)
- C++primer学习:模板编程(2):类模板的定义
- 证明N个节点构成一棵树的种类数
- Mysql学习笔记一, 安装Mysql,简单命令学习
- 记一次被中间人攻击的经历
- Terminal终端的快捷键
- Mysql:is not allowed to connect to this MySQL server
- Linux文件系统分析之五(常规文件的表示)
- Linux文件系统分析之四(目录项)
- 高通Adreno图形处理器全解析
- 学习code的几个相当不错的搜索引擎
- Eclipse添加和查看书签
- 原型模式
- Rust基础笔记:Getting input from the console
- 【啊哈!算法】最快最简单的排序——桶排序