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?
Code (Java):
public class Solution { public int[] singleNumber(int[] nums) { if (nums == null || nums.length == 0) { return new int[0]; } int xor = 0; // Step 1: calculate the xor for all numbers // So the result is the xor of the two single numbers for (int num : nums) { xor ^= num; } // Step 2: find the first bit 1 from right int mask = 1; while ((mask & xor) == 0) { mask = mask << 1; } int xor1 = 0; int xor2 = 0; for (int num : nums) { if ((num & mask) == 0) { xor1 ^= num; } else { xor2 ^= num; } } int[] result = new int[]{xor1, xor2}; return result; } }
No comments:
Post a Comment