-
Notifications
You must be signed in to change notification settings - Fork 13
Expand file tree
/
Copy pathequal.cpp
More file actions
41 lines (37 loc) · 1.09 KB
/
equal.cpp
File metadata and controls
41 lines (37 loc) · 1.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
bool is_valid(array<int, 4>& quad) {
return (quad[0] < quad[1] && quad[2] < quad[3]
&& quad[0] < quad[2] && quad[1] != quad[3]
&& quad[1] != quad[2]);
}
// Time - O(N^2), Space - O(N^2)
vector<int> solve_equal(const vector<int>& nums) {
int n = nums.size();
unordered_map<int, array<int, 2>> seen;
vector<array<int, 4>> equal_indices;
for(int i = 0; i < n - 1; i++) {
for(int j = i + 1; j < n; j++) {
int sum = nums[i] + nums[j];
if(seen.count(sum)) {
array<int, 2> pair_seen = seen[sum];
equal_indices.push_back({pair_seen[0], pair_seen[1], i, j});
}
else {
seen[sum] = {i, j};
}
}
}
sort(equal_indices.begin(), equal_indices.end());
vector<int> result;
for(auto& quad: equal_indices) {
if(is_valid(quad)) {
for(auto& i: quad) {
result.push_back(i);
}
break;
}
}
return result;
}
vector<int> Solution::equal(vector<int> &A) {
return solve_equal(A);
}