Array of Doubled Pairs LeetCode solution in C++

1
class Solution {
2
public:
3
bool func(vector<int> pos) {
4
map<int, int> mp;
5
for (int i = 0; i < pos.size(); i++) {
6
mp[pos[i]]++;
7
}
8

9
for (auto it : mp) {
10
if (mp.find(2 * it.first) == mp.end()) {
11
return false;
12
}
13
if (mp[it.first] > mp[2 * it.first]) {
14
return false;
15
}
16
mp[2 * it.first] -= mp[it.first];
17
if (mp[2 * it.first] == 0) mp.erase(2 * it.first);
18
}
19

20
return true;
21
}
22

23
bool canReorderDoubled(vector<int> &arr) {
24
int n = arr.size();
25
vector<int> pos, neg;
26
int zeroes = 0;
27
for (int i : arr) {
28
if (i > 0) {
29
pos.push_back(i);
30
} else if (i < 0) {
31
neg.push_back(i);
32
} else {
33
zeroes++;
34
}
35
}
36

37
if (zeroes % 2 != 0) {
38
return false;
39
}
40

41
if (neg.size() % 2 != 0 or pos.size() % 2 != 0) {
42
return false;
43
}
44

45
for (int i = 0; i < neg.size(); i++) {
46
neg[i] = -1 * neg[i];
47
}
48

49
sort(pos.begin(), pos.end());
50
sort(neg.begin(), neg.end());
51
return func(pos) and func(neg);
52
}
53
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0