27.leetcode题目137: Single Number II(考察位操作)
来源:互联网 发布:水电算量软件 编辑:程序博客网 时间:2024/05/29 09:57
题目:
Given an array of integers, every element appears three times except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
分析:
方法一,使用map统计每个元素出现的次数(28ms)
class Solution {public: int singleNumber(vector<int>& nums) { map<int,int> tar; for(vector<int>::size_type i=0;i<nums.size();++i){ //if(find(nums[i])==nums.end()){ ++tar[nums[i]]; } for(map<int,int>::iterator it=tar.begin();it!=tar.end();++it){ if(it->second==1){ return it->first; //break; } } }};方法2,位操作(参考别人博客)
对于右数第i位,如果孤异元素该位为0,则该位为1的元素总数为3的整数倍。
如果孤异元素该位为1,则该位为1的元素总数不为3的整数倍。
换句话说,如果第i位为1的元素总数不为3的整数倍,则孤异数的第i位为1,否则为0.
(如果非孤异元素重复n次,则判断是否为n的整数倍)
class Solution {public: int singleNumber(vector<int>& nums) { int res=0; int mask=1;//统计相应位为1的个数,若异常数该位为0,则该位1的个数为3的整数倍 while(mask){ int count=0; for(vector<int>::size_type i=0;i<nums.size();++i){ if(nums[i]&mask){ //统计相应位为1的个数 ++count; } } if(count%3!=0){ //不是3的整数倍则异常数该位为1 res|=mask; } mask<<=1; //mask左移一位 } return res; }};
20ms
0 0
- 27.leetcode题目137: Single Number II(考察位操作)
- leetcode -- Single Number II &III- 位操作,没有理解
- leetcode题目:Single Number和Single Number II
- Leetcode-位运算-137. Single Number II(坑未填)
- LeetCode-Single Number II[位运算]
- LeetCode 137. Single Number II (位运算)
- [leetcode-137]Single Number II (c)
- LeetCode(137) Single Number II
- Single Number II的位操作解法
- LeetCode 137 Single Number II
- LeetCode 137 Single Number II
- leetCode: Single Number II [137]
- [leetcode 137] Single Number II
- leetcode-137 Single Number II
- leetcode || 137、Single Number II
- LeetCode 137:Single Number II
- 【leetcode】【137】Single Number II
- LeetCode---(137)Single Number II
- static特别用法【静态导包】——Java包的静态导入
- 林小欣的every day
- 用requests爬取百度搜索数据
- lightoj 1030 概率dp
- 林小欣的every day
- 27.leetcode题目137: Single Number II(考察位操作)
- [Android 系统源代码研究] SystemService启动
- LeetCode 313. Super Ugly Number
- Android第五周的学习笔记
- pods安装
- python 出现错误 SyntaxError: Non-ASCII character 的解决方法
- Leetcode #27. Remove Element 移除元素 解题报告
- JavaScript Math.floor()
- poj3984迷宫问题