Skip to content

Commit 6324fa9

Browse files
1020. Partition Array
1 parent 885516d commit 6324fa9

File tree

1 file changed

+52
-0
lines changed

1 file changed

+52
-0
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/**
2+
Given an array A of integers, return true if and only if we can partition the array into three non-empty parts with equal sums.
3+
4+
Formally, we can partition the array if we can find indexes i+1 < j with (A[0] + A[1] + ... + A[i] == A[i+1] + A[i+2] + ... + A[j-1] == A[j] + A[j-1] + ... + A[A.length - 1])
5+
6+
7+
8+
Example 1:
9+
10+
Input: [0,2,1,-6,6,-7,9,1,2,0,1]
11+
Output: true
12+
Explanation: 0 + 2 + 1 = -6 + 6 - 7 + 9 + 1 = 2 + 0 + 1
13+
Example 2:
14+
15+
Input: [0,2,1,-6,6,7,9,-1,2,0,1]
16+
Output: false
17+
Example 3:
18+
19+
Input: [3,3,6,5,-2,2,5,1,-9,4]
20+
Output: true
21+
Explanation: 3 + 3 = 6 = 5 - 2 + 2 + 5 + 1 - 9 + 4
22+
23+
24+
Note:
25+
26+
3 <= A.length <= 50000
27+
-10000 <= A[i] <= 10000
28+
**/
29+
30+
//Runtime: 80 ms, faster than 21.72% of C++ online submissions for Partition Array Into Three Parts With Equal Sum.
31+
//Memory Usage: 12.5 MB, less than 100.00% of C++ online submissions for Partition Array Into Three Parts With Equal Sum.
32+
33+
class Solution {
34+
public:
35+
bool canThreePartsEqualSum(vector<int>& A) {
36+
int sum = accumulate(A.begin(), A.end(), 0);
37+
int firstSum = 0;
38+
39+
for(int s1 = 0; s1 < A.size()-1; s1++){
40+
firstSum += A[s1];
41+
if(firstSum*3 == sum){
42+
int secondSum = 0;
43+
for(int s2 = s1+1; s2 < A.size(); s2++){
44+
secondSum += A[s2];
45+
if(secondSum == firstSum) return true;
46+
}
47+
}
48+
}
49+
50+
return false;
51+
}
52+
};

0 commit comments

Comments
 (0)