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

All Problems

All Solutions