notes/OJ notes/pages/Leetcode Single-Number.md

95 lines
1.6 KiB
Markdown
Raw Normal View History

2022-07-22 15:36:57 +08:00
# Leetcode Single-Number
#### 2022-07-22 15:31
> ##### Algorithms:
2022-09-03 15:41:36 +08:00
>
> #algorithm #bit_manipulation
>
2022-07-22 15:36:57 +08:00
> ##### Data structures:
2022-09-03 15:41:36 +08:00
>
2022-07-22 15:36:57 +08:00
> #DS #bitset
2022-09-03 15:41:36 +08:00
>
2022-07-22 15:36:57 +08:00
> ##### Difficulty:
2022-09-03 15:41:36 +08:00
>
2022-09-06 20:22:48 +08:00
> #coding_problem #difficulty_easy
2022-09-03 15:41:36 +08:00
>
2022-07-22 15:36:57 +08:00
> ##### Additional tags:
2022-09-03 15:41:36 +08:00
>
> #leetcode
>
2022-07-22 15:36:57 +08:00
> ##### Revisions:
2022-09-03 15:41:36 +08:00
>
2022-07-22 15:36:57 +08:00
> N/A
##### Related topics:
2022-09-03 15:41:36 +08:00
2022-07-22 15:36:57 +08:00
##### Links:
2022-09-03 15:41:36 +08:00
2022-07-22 15:36:57 +08:00
- [Link to problem](https://leetcode.com/problems/single-number/)
2022-07-22 16:03:37 +08:00
- [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)
2022-09-03 15:41:36 +08:00
---
2022-07-22 15:36:57 +08:00
### 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
2022-07-22 15:46:45 +08:00
**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
2022-07-22 15:36:57 +08:00
#### Constraints
2022-09-03 15:41:36 +08:00
- `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.
2022-07-22 15:46:45 +08:00
2022-07-22 15:36:57 +08:00
### Thoughts
> [!summary]
2022-07-22 15:46:45 +08:00
> This is a #bit_manipulation problem utilizing the XOR operator
2022-07-22 16:03:37 +08:00
The XOR operator has some properties:
```
a ^ a = 0;
a ^ b ^ a = a ^ a ^ b = b;
```
This can be used for our problem.
2022-07-22 15:36:57 +08:00
### Solution
2022-07-22 16:03:37 +08:00
```cpp
class Solution {
public:
int singleNumber(vector<int> &nums) {
// Using XOR operator
int ans = 0;
for (int i : nums) {
ans ^= i;
}
return ans;
}
};
2022-09-03 15:41:36 +08:00
```