notes/OJ notes/pages/Leetcode Single-Number.md
2022-09-06 20:22:48 +08:00

95 lines
1.6 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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;
}
};
```