您的位置:首页 > 其它

136. Single Number && 137. Single Number II && 260. Single Number III

2016-05-08 13:26 375 查看

136. Single Number

Given an array of integers, every element appears twice except for one. Find that single one.

Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?

Hash Table Bit Manipulation

public class Solution {
public int singleNumber(int[] nums) {
int xor = 0;
for(int n : nums)
xor ^= n;
return xor;
}
}


137. Single Number II

Given an array of integers, every element appears three times except for one. Find that single one.

Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?

Bit Manipulation

260. Single Number III

Given an array of numbers
nums
, in which exactly two elements appear only once and all the other elements appear exactly twice. Find the two elements that appear only once.

For example:

Given
nums = [1, 2, 1, 3, 2, 5]
, return
[3, 5]
.

Note:

The order of the result is not important. So in the above example,
[5, 3]
is also correct.

Your algorithm should run in linear runtime complexity. Could you implement it using only constant space complexity?

Bit Manipulation

public class Solution {
public int[] singleNumber(int[] nums) {
// Pass 1 :
// Get the XOR of the two numbers we need to find
int diff = 0;
for (int num : nums) {
diff ^= num;
}
// Get the rightmost different bit between these two numbers.
diff &= -diff;

// Pass 2 :
int[] rets = {0, 0}; //split the two numbers we are looking for into two groups.
for (int num : nums)
{
if ((num & diff) == 0) // the group that has rightmost bit unset.
{
rets[0] ^= num;
}
else // the group that has rightmost bit set.
{
rets[1] ^= num;
}
}
return rets;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: