95 lines
1.6 KiB
Markdown
95 lines
1.6 KiB
Markdown
# 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;
|
||
}
|
||
};
|
||
```
|