Title: Single Number III Source: leetcode.com
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?
Java solution
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
/* https://leetcode.com/problems/single-number-iii/ */ class SingleNumberIII { public static void main(String args[]) { } public int[] singleNumber(int[] nums) { int xor = 0; for (int num : nums) xor ^= num; xor = Integer.highestOneBit(xor); //dividing the nums array into two groups one with highest one bit set and other with unset int[] result = new int[2]; for(int num: nums) { if((xor & num) == 0) //highest bit is not set { result[0] ^= num; } else { result[1] ^= num; } } return result; } } |