Array of Doubled Pairs LeetCode solution in C++
1class Solution {2public:3bool func(vector<int> pos) {4map<int, int> mp;5for (int i = 0; i < pos.size(); i++) {6mp[pos[i]]++;7}89for (auto it : mp) {10if (mp.find(2 * it.first) == mp.end()) {11return false;12}13if (mp[it.first] > mp[2 * it.first]) {14return false;15}16mp[2 * it.first] -= mp[it.first];17if (mp[2 * it.first] == 0) mp.erase(2 * it.first);18}1920return true;21}2223bool canReorderDoubled(vector<int> &arr) {24int n = arr.size();25vector<int> pos, neg;26int zeroes = 0;27for (int i : arr) {28if (i > 0) {29pos.push_back(i);30} else if (i < 0) {31neg.push_back(i);32} else {33zeroes++;34}35}3637if (zeroes % 2 != 0) {38return false;39}4041if (neg.size() % 2 != 0 or pos.size() % 2 != 0) {42return false;43}4445for (int i = 0; i < neg.size(); i++) {46neg[i] = -1 * neg[i];47}4849sort(pos.begin(), pos.end());50sort(neg.begin(), neg.end());51return func(pos) and func(neg);52}53};