> For the complete documentation index, see [llms.txt](https://mayanktyagi3111.gitbook.io/interview-prep/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mayanktyagi3111.gitbook.io/interview-prep/bit-manipulation/single-number-iii.md).

# 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.

**Example:**

```
Input:  [1,2,1,3,2,5]
Output: [3,5]
```

**Note**:

1. The order of the result is not important. So in the above example, `[5, 3]` is also correct.
2. Your algorithm should run in linear runtime complexity. Could you implement it using only constant space complexity?

```java
public class Solution {
    public int[] singleNumber(int[] nums) {
        // Get the XOR of the two numbers we need to find
        int diff = 0;
        for (int num : nums)
            diff ^= num;
        // Get its right-most set bit (LSB)
        int setBit = diff & (~(diff - 1));
        // Now on the basis of this bit, we can divide array into 2 parts
        // The one with all the elements with this bit set
        // and the other part with this bit unset
        // Pass 2 :
        int[] ans = { 0, 0 };
        for (int num : nums) {
            if ((num & setBit) == 0)
                ans[0] ^= num;
            else
                ans[1] ^= num;
        }
        return ans;
    }
}
```
