A non-empty array A consisting of N integers is given. Array A represents numbers on a tape.
Any integer P, such that 0 < P < N, splits this tape into two non-empty parts: A[0], A[1], ..., A[P − 1] and A[P], A[P + 1], ..., A[N − 1].
The difference between the two parts is the value of: |(A[0] + A[1] + ... + A[P − 1]) − (A[P] + A[P + 1] + ... + A[N − 1])|
In other words, it is the absolute difference between the sum of the first part and the sum of the second part.
For example, consider array A such that:
A[0] = 3 A[1] = 1 A[2] = 2 A[3] = 4 A[4] = 3We can split this tape in four places:
- P = 1, difference = |3 − 10| = 7
- P = 2, difference = |4 − 9| = 5
- P = 3, difference = |6 − 7| = 1
- P = 4, difference = |10 − 3| = 7
Write a function:
int solution(vector<int> &A);
that, given a non-empty array A of N integers, returns the minimal difference that can be achieved.
For example, given:
A[0] = 3 A[1] = 1 A[2] = 2 A[3] = 4 A[4] = 3the function should return 1, as explained above.
Write an efficient algorithm for the following assumptions:
- N is an integer within the range [2..100,000];
- each element of array A is an integer within the range [−1,000..1,000].
// you can use includes, for example:
// #include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
int solution(vector<int> &A) {
// write your code in C++11
long int N = A.capacity();
int i,j,p,min;
long int sum = 0;
for (i = 0; i < N; i++) sum += A[i];
vector<int> B;
for (p = 1; p < N; p++) {
if (p == 1){
diff = 2*A[p-1] - sum;
min = abs(diff);
}
else{
temp = diff + 2* A[p-1];
absTemp = abs(temp);
if (absTemp < min) min = absTemp;
}
}
return min;
}
}
}
func.cpp: In function 'int solution(std::vector<int>&)': func.cpp:22:13: error: 'diff' was not declared in this scope diff = 2*A[p-1] - sum; ^ func.cpp:26:13: error: 'temp' was not declared in this scope temp = diff + 2* A[p-1]; ^ func.cpp:26:20: error: 'diff' was not declared in this scope temp = diff + 2* A[p-1]; ^ func.cpp:27:13: error: 'absTemp' was not declared in this scope absTemp = abs(temp); ^ func.cpp:12:11: warning: unused variable 'j' [-Wunused-variable] int i,j,p,min; ^ func.cpp: At global scope: func.cpp:37:5: error: expected declaration before '}' token } ^
// you can use includes, for example:
// #include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
int solution(vector<int> &A) {
// write your code in C++11
long int N = A.capacity();
int i, temp ,p, diff, min;
long int sum = 0;
for (i = 0; i < N; i++) sum += A[i];
vector<int> B;
for (p = 1; p < N; p++) {
if (p == 1){
diff = 2*A[p-1] - sum;
min = abs(diff);
}
else{
temp = diff + 2* A[p-1];
absTemp = abs(temp);
if (absTemp < min) min = absTemp;
}
}
return min;
}
}
}
func.cpp: In function 'int solution(std::vector<int>&)': func.cpp:27:13: error: 'absTemp' was not declared in this scope absTemp = abs(temp); ^ func.cpp: At global scope: func.cpp:37:5: error: expected declaration before '}' token } ^
// you can use includes, for example:
// #include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
int solution(vector<int> &A) {
// write your code in C++11
long int N = A.capacity();
int i, p, min, absTemp;
long int diff,
long int sum = 0;
for (i = 0; i < N; i++) sum += A[i];
for (p = 1; p < N; p++) {
if (p == 1){
diff = 2*A[p-1] - sum;
min = abs(diff);
}
else{
temp = diff + 2* A[p-1];
absTemp = abs(temp);
if (absTemp < min) min = absTemp;
}
}
return min;
}
func.cpp: In function 'int solution(std::vector<int>&)': func.cpp:14:5: error: expected unqualified-id before 'long' long int sum = 0; ^ func.cpp:15:29: error: 'sum' was not declared in this scope for (i = 0; i < N; i++) sum += A[i]; ^ func.cpp:20:31: error: 'sum' was not declared in this scope diff = 2*A[p-1] - sum; ^ func.cpp:24:13: error: 'temp' was not declared in this scope temp = diff + 2* A[p-1]; ^
// you can use includes, for example:
// #include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
int solution(vector<int> &A) {
// write your code in C++11
long int N = A.capacity();
int i, p, min, absTemp;
long int diff;
long int sum = 0;
for (i = 0; i < N; i++) sum += A[i];
for (p = 1; p < N; p++) {
if (p == 1){
diff = 2*A[p-1] - sum;
min = abs(diff);
}
else{
temp = diff + 2* A[p-1];
absTemp = abs(temp);
if (absTemp < min) min = absTemp;
}
}
return min;
}
func.cpp: In function 'int solution(std::vector<int>&)': func.cpp:24:13: error: 'temp' was not declared in this scope temp = diff + 2* A[p-1]; ^
// you can use includes, for example:
// #include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
int solution(vector<int> &A) {
// write your code in C++11
long int N = A.capacity();
int i, p, min, absTemp;
long int diff, temp;
long int sum = 0;
for (i = 0; i < N; i++) sum += A[i];
for (p = 1; p < N; p++) {
if (p == 1){
diff = 2*A[p-1] - sum;
min = abs(diff);
}
else{
temp = diff + 2* A[p-1];
absTemp = abs(temp);
if (absTemp < min) min = absTemp;
}
}
return min;
}
// you can use includes, for example:
// #include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
int solution(vector<int> &A) {
// write your code in C++11
long int N = A.capacity();
int i, p, min, absTemp;
long int diff, temp;
long int sum = 0;
for (i = 0; i < N; i++) sum += A[i];
for (p = 1; p < N; p++) {
if (p == 1){
diff = 2*A[p-1] - sum;
min = abs(diff);
}
else{
temp = diff + 2* A[p-1];
absTemp = abs(temp);
if (absTemp < min) min = absTemp;
}
}
return min;
}
[8, -1, -1, 7, 6, 4]
// you can use includes, for example:
// #include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
int solution(vector<int> &A) {
// write your code in C++11
long int N = A.capacity();
cout << "N: " << N << endl;
int i, p, min, absTemp;
long int diff, temp;
long int sum = 0;
for (i = 0; i < N; i++) sum += A[i];
for (p = 1; p < N; p++) {
if (p == 1){
diff = 2*A[p-1] - sum;
min = abs(diff);
}
else{
temp = diff + 2* A[p-1];
absTemp = abs(temp);
if (absTemp < min) min = absTemp;
}
}
return min;
}
[8, -1, -1, 7, 6, 4]
// you can use includes, for example:
// #include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
int solution(vector<int> &A) {
// write your code in C++11
long int N = A.capacity();
//cout << "N: " << N << endl;
int i, p, min, absTemp;
long int diff, temp;
long int sum = 0;
for (i = 0; i < N; i++) sum += A[i];
cout << "sum: " << sum << endl;
for (p = 1; p < N; p++) {
if (p == 1){
diff = 2*A[p-1] - sum;
min = abs(diff);
}
else{
temp = diff + 2* A[p-1];
absTemp = abs(temp);
if (absTemp < min) min = absTemp;
}
}
return min;
}
[8, -1, -1, 7, 6, 4]
// you can use includes, for example:
// #include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
int solution(vector<int> &A) {
// write your code in C++11
long int N = A.capacity();
//cout << "N: " << N << endl;
int i, p, min, absTemp;
long int diff, temp;
long int sum = 0;
for (i = 0; i < N; i++) sum += A[i];
//cout << "sum: " << sum << endl;
for (p = 1; p < N; p++) {
if (p == 1){
diff = 2*A[p-1] - sum;
min = abs(diff);
}
else{
temp = diff + 2* A[p-1];
absTemp = abs(temp);
if (absTemp < min) min = absTemp;
}
}
return min;
}
[8, -1, -1, 7, 6, 4]
#include <stdlib.h>
// you can use includes, for example:
// #include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
int solution(vector<int> &A) {
// write your code in C++11
long int N = A.capacity();
//cout << "N: " << N << endl;
int i, p, min, absTemp;
long int diff, temp;
long int sum = 0;
for (i = 0; i < N; i++) sum += A[i];
//cout << "sum: " << sum << endl;
for (p = 1; p < N; p++) {
if (p == 1){
diff = 2*A[p-1] - sum;
min = abs(diff);
}
else{
temp = diff + 2* A[p-1];
absTemp = abs(temp);
if (absTemp < min) min = absTemp;
}
}
return min;
}
[8, -1, -1, 7, 6, 4]
#include <stdlib.h>
// you can use includes, for example:
// #include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
int solution(vector<int> &A) {
// write your code in C++11
long int N = A.capacity();
//cout << "N: " << N << endl;
int i, p, min, absTemp;
long int diff, temp;
long int sum = 0;
for (i = 0; i < N; i++) sum += A[i];
//cout << "sum: " << sum << endl;
for (p = 1; p < N; p++) {
if (p == 1){
diff = 2*A[p-1] - sum;
min = abs(diff);
}
else{
temp = diff + 2*A[p-1];
absTemp = abs(temp);
if (absTemp < min) min = absTemp;
}
}
return min;
}
[8, -1, -1, 7, 6, 4]
#include <stdlib.h>
// you can use includes, for example:
// #include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
int solution(vector<int> &A) {
// write your code in C++11
long int N = A.capacity();
//cout << "N: " << N << endl;
int i, p, min, absTemp;
long int diff, temp;
long int sum = 0;
for (i = 0; i < N; i++) sum += A[i];
//cout << "sum: " << sum << endl;
for (p = 1; p <= N; p++) {
if (p == 1){
diff = 2*A[p-1] - sum;
min = abs(diff);
}
else{
temp = diff + 2*A[p-1];
absTemp = abs(temp);
if (absTemp < min) min = absTemp;
}
}
return min;
}
[8, -1, -1, 7, 6, 4]
#include <stdlib.h>
// you can use includes, for example:
// #include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
int solution(vector<int> &A) {
// write your code in C++11
long int N = A.capacity();
//cout << "N: " << N << endl;
int i, p, min, absTemp;
long int diff, temp;
long int sum = 0;
for (i = 0; i < N; i++) sum += A[i];
//cout << "sum: " << sum << endl;
for (p = 1; p <= N; p++) {
if (p == 1){
diff = 2*A[p-1] - sum;
min = abs(diff);
}
else{
temp = diff + 2*A[p-1];
absTemp = abs(temp);
if (absTemp < min) min = absTemp;
}
}
return min;
}
[8, -1, -1, 7, 6, 4]
[1, 2, 3, 4, 5]
#include <stdlib.h>
// you can use includes, for example:
// #include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
int solution(vector<int> &A) {
// write your code in C++11
long int N = A.capacity();
//cout << "N: " << N << endl;
int i, p, min, absTemp;
long int diff, temp;
long int sum = 0;
for (i = 0; i < N; i++) sum += A[i];
//cout << "sum: " << sum << endl;
for (p = 1; p <= N; p++) {
if (p == 1){
diff = 2*A[p-1] - sum;
min = abs(diff);
}
else{
temp = diff + 2*A[p-1];
absTemp = abs(temp);
if (absTemp < min) min = absTemp;
}
}
return min;
}
[8, -1, -1, 7, 6, 4]
[-1, 2, -3, 4, -5]
#include <stdlib.h>
// you can use includes, for example:
// #include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
int solution(vector<int> &A) {
// write your code in C++11
long int N = A.capacity();
//cout << "N: " << N << endl;
int i, p, min, absTemp;
long int diff, temp;
long int sum = 0;
for (i = 0; i < N; i++) sum += A[i];
//cout << "sum: " << sum << endl;
for (p = 1; p <= N; p++) {
if (p == 1){
diff = 2*A[p-1] - sum;
min = abs(diff);
}
else{
temp = diff + 2*A[p-1];
absTemp = abs(temp);
if (absTemp < min) min = absTemp;
}
}
return min;
}
[8, -1, -1, 7, 6, 4]
[-1, -2, -3, 4, -5]
#include <stdlib.h>
// you can use includes, for example:
// #include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
int solution(vector<int> &A) {
// write your code in C++11
long int N = A.capacity();
//cout << "N: " << N << endl;
int i, p, min, absTemp;
long int diff, temp;
long int sum = 0;
for (i = 0; i < N; i++) sum += A[i];
//cout << "sum: " << sum << endl;
for (p = 1; p <N; p++) {
if (p == 1){
diff = 2*A[p-1] - sum;
min = abs(diff);
}
else{
temp = diff + 2*A[p-1];
absTemp = abs(temp);
if (absTemp < min) min = absTemp;
}
}
return min;
}
[8, -1, -1, 7, 6, 4]
[-1, -2, -3, 4, -5]
#include <stdlib.h>
// you can use includes, for example:
// #include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
int solution(vector<int> &A) {
// write your code in C++11
long int N = A.capacity();
//cout << "N: " << N << endl;
int i, p, min, absTemp;
long int diff, temp;
long int sum = 0;
for (i = 0; i < N; i++) sum += A[i];
//cout << "sum: " << sum << endl;
for (p = 1; p <N; p++) {
if (p == 1){
diff = 2*A[p-1] - sum;
min = abs(diff);
}
else{
temp = diff + 2*A[p-1];
absTemp = abs(temp);
if (absTemp < min) min = absTemp;
}
}
return min;
}
[8, -1, -1, 7, 6, 4]
[-1, -2, -3, 4, -5]
#include <stdlib.h>
// you can use includes, for example:
// #include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
int solution(vector<int> &A) {
// write your code in C++11
long int N = A.capacity();
//cout << "N: " << N << endl;
int i, p, min, absTemp;
long int diff, temp;
long int sum = 0;
for (i = 0; i < N; i++) sum += A[i];
//cout << "sum: " << sum << endl;
for (p = 1; p <N; p++) {
if (p == 1){
diff = 2*A[p-1] - sum;
min = abs(diff);
}
else{
temp = diff + 2*A[p-1];
absTemp = abs(temp);
if (absTemp < min) min = absTemp;
}
}
return min;
}
The following issues have been detected: wrong answers.
For example, for the input [5, 6, 2, 4, 1] the solution returned a wrong answer (got 0 expected 4).
random medium, numbers from 0 to 100, length = ~10,000
got 501606 expected 34
random medium, numbers from -1,000 to 50, length = ~10,000
got 4727264 expected 196
large sequence, numbers from -1 to 1, length = ~100,000
got 248 expected 0
large test with maximal and minimal values, length = ~100,000
got 99996000 expected 0