# Leetcode Single-Number

#### 2022-07-22 15:31

> ##### Algorithms:
>
> #algorithm #bit_manipulation
>
> ##### Data structures:
>
> #DS #bitset
>
> ##### Difficulty:
>
> #coding_problem #difficulty-easy
>
> ##### Additional tags:
>
> #leetcode
>
> ##### Revisions:
>
> N/A

##### Related topics:

##### Links:

- [Link to problem](https://leetcode.com/problems/single-number/)
- [Learn about XOR](https://en.wikipedia.org/wiki/Exclusive_or#Computer_science)
- [Explanation](https://leetcode.com/problems/single-number/discuss/1772139/C%2B%2Bor-Explained-Everything-w-WHY-XOR-WORKSor-BRUTE-FORCE-TO-OPTIMIZEDor-STEP-BY-STEP-DRY-RUN)

---

### Problem

Given a **non-empty** array of integers `nums`, every element appears _twice_ except for one. Find that single one.

You must implement a solution with a linear runtime complexity and use only constant extra space.

#### Examples

**Example 1:**

**Input:** nums = [2,2,1]
**Output:** 1

**Example 2:**

**Input:** nums = [4,1,2,1,2]
**Output:** 4

**Example 3:**

**Input:** nums = [1]
**Output:** 1

#### Constraints

- `1 <= nums.length <= 3 * 104`
- `-3 * 104 <= nums[i] <= 3 * 104`
- Each element in the array appears twice except for one element which appears only once.

### Thoughts

> [!summary]
> This is a #bit_manipulation problem utilizing the XOR operator

The XOR operator has some properties:

```
a ^ a = 0;
a ^ b ^ a = a ^ a ^ b = b;
```

This can be used for our problem.

### Solution

```cpp
class Solution {
public:
  int singleNumber(vector<int> &nums) {
    // Using XOR operator
    int ans = 0;

    for (int i : nums) {
      ans ^= i;
    }

    return ans;
  }
};
```
