Welcome to Subscribe On Youtube
Formatted question description: https://leetcode.ca/all/2206.html
2206. Divide Array Into Equal Pairs (Easy)
You are given an integer array nums
consisting of 2 * n
integers.
You need to divide nums
into n
pairs such that:
- Each element belongs to exactly one pair.
- The elements present in a pair are equal.
Return true
if nums can be divided into n
pairs, otherwise return false
.
Example 1:
Input: nums = [3,2,3,2,2,2] Output: true Explanation: There are 6 elements in nums, so they should be divided into 6 / 2 = 3 pairs. If nums is divided into the pairs (2, 2), (3, 3), and (2, 2), it will satisfy all the conditions.
Example 2:
Input: nums = [1,2,3,4] Output: false Explanation: There is no way to divide nums into 4 / 2 = 2 pairs such that the pairs satisfy every condition.
Constraints:
nums.length == 2 * n
1 <= n <= 500
1 <= nums[i] <= 500
Similar Questions:
Solution 1. Counting
The count of each unique number should be even.
// OJ: https://leetcode.com/problems/divide-array-into-equal-pairs/
// Time: O(N)
// Space: O(U) where `U` is the number of unique numbers in `A`
class Solution {
public:
bool divideArray(vector<int>& A) {
unordered_map<int, int> m;
for (int n : A) m[n]++;
for (auto &[n, cnt] : m) {
if (cnt % 2) return false;
}
return true;
}
};
Solution 2. Sorting
All even-indexed numbers should equal their next numbers.
// OJ: https://leetcode.com/problems/divide-array-into-equal-pairs/
// Time: O(NlogN)
// Space: O(1)
class Solution {
public:
bool divideArray(vector<int>& A) {
sort(begin(A), end(A));
for (int i = 0; i < A.size(); i += 2) {
if (A[i] != A[i + 1]) return false;
}
return true;
}
};