Leetcode Single Number II
2017-07-10 14:11
211 查看
Given an array of integers, every element appears
three times except for one, which appears exactly once. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
看到题目第一个反应就是利用hash表来解决该问题,但需要耗费O(N)的内存空间以及遍历两次,不符合要求。然后就想着像之前的题目一样如何组合运算符和数字来实现,从整个数来说是不行,但可以从每个位来进行判断。某个位的所有1的个数余3就等于所求数在该位的数值。
代码如下:
class Solution {
public:
int singleNumber(vector<int>& nums) {
int sum = 0;
int result = 0;
for(int i=0;i<32;i++)
{
int mask = 1<<i;
sum = 0;
for(int j=0;j<nums.size();j++)
{
if((nums[j]&mask)!=0)
{
sum++;
sum = sum%3;
}
}
if(sum != 0)
result |= mask;
}
return result;
}
};
three times except for one, which appears exactly once. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
看到题目第一个反应就是利用hash表来解决该问题,但需要耗费O(N)的内存空间以及遍历两次,不符合要求。然后就想着像之前的题目一样如何组合运算符和数字来实现,从整个数来说是不行,但可以从每个位来进行判断。某个位的所有1的个数余3就等于所求数在该位的数值。
代码如下:
class Solution {
public:
int singleNumber(vector<int>& nums) {
int sum = 0;
int result = 0;
for(int i=0;i<32;i++)
{
int mask = 1<<i;
sum = 0;
for(int j=0;j<nums.size();j++)
{
if((nums[j]&mask)!=0)
{
sum++;
sum = sum%3;
}
}
if(sum != 0)
result |= mask;
}
return result;
}
};
相关文章推荐
- [LeetCode] Single Number II
- leetcode之137. Single Number II(C++解法 哈希表计数)
- LeetCode: Single Number II
- 137.leetcode Single Number II(medium)[单数 三次]
- LeetCode刷题笔录Single Number II
- LeetCode(137)Single NumberII
- leetcode 15 Single Number II
- Java for LeetCode 137 Single Number II
- LeetCode_Single Number&Single NumberII
- leetcode-Single Number II
- Leetcode 137: (Single Number II)
- leetcode 日经贴,Cpp code -Single Number II
- 【Leetcode】Single Number II
- [LeetCode] Single Number II, Solution
- LeetCode:Single Number II
- [LeetCode] Single Number II
- Leetcode: Single Number II
- LeetCode | Single Number II(单个数字II)
- 【leetcode】Single Number II
- LeetCode: Single Number II