-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy pathSplitArrayWithEqualSum.cpp
More file actions
34 lines (29 loc) · 915 Bytes
/
SplitArrayWithEqualSum.cpp
File metadata and controls
34 lines (29 loc) · 915 Bytes
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
#include "SplitArrayWithEqualSum.hpp"
bool SplitArrayWithEqualSum::splitArray(vector<int>& nums) {
if (nums.size() <= 6)
return false;
int n = nums.size();
vector<int> aggregate(n + 1, 0);
for (int i = 0; i < n; i++) {
aggregate[i + 1] = aggregate[i] + nums[i];
}
for (int j = 3; j + 3 < n; j++) {
set<int> v1, v2;
if (splitEqual(aggregate, 0, j - 1, v1) &&
splitEqual(aggregate, j + 1, n - 1, v2)) {
for (auto c1 : v1) {
if (v2.count(c1))
return true;
}
}
}
return false;
}
bool SplitArrayWithEqualSum::splitEqual(vector<int>& agg, int i, int j, set<int>& v) {
for (int k = i + 1; k + 1 <= j; k++) {
if (agg[k] - agg[i] == agg[j + 1] - agg[k + 1]) {
v.insert(agg[k] - agg[i]);
}
}
return !v.empty();
}