Let A be a non-empty array consisting of N integers.
The abs sum of two for a pair of indices (P, Q) is the absolute value |A[P] + A[Q]|, for 0 ≤ P ≤ Q < N.
For example, the following array A:
A[0] = 1 A[1] = 4 A[2] = -3has pairs of indices (0, 0), (0, 1), (0, 2), (1, 1), (1, 2), (2, 2).
The abs sum of two for the pair (0, 0) is A[0] + A[0] = |1 + 1| = 2.
The abs sum of two for the pair (0, 1) is A[0] + A[1] = |1 + 4| = 5.
The abs sum of two for the pair (0, 2) is A[0] + A[2] = |1 + (−3)| = 2.
The abs sum of two for the pair (1, 1) is A[1] + A[1] = |4 + 4| = 8.
The abs sum of two for the pair (1, 2) is A[1] + A[2] = |4 + (−3)| = 1.
The abs sum of two for the pair (2, 2) is A[2] + A[2] = |(−3) + (−3)| = 6.
Write a function:
function solution(A);
that, given a non-empty array A consisting of N integers, returns the minimal abs sum of two for any pair of indices in this array.
For example, given the following array A:
A[0] = 1 A[1] = 4 A[2] = -3the function should return 1, as explained above.
Given array A:
A[0] = -8 A[1] = 4 A[2] = 5 A[3] =-10 A[4] = 3the function should return |(−8) + 5| = 3.
Write an efficient algorithm for the following assumptions:
- N is an integer within the range [1..100,000];
- each element of array A is an integer within the range [−1,000,000,000..1,000,000,000].
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
if (A.length === 1) {
return Math.abs(A[0]*2);
}
A.sort((a, b) => a - b);
let left = 0;
let right = 0;
for (let i = 0; i < A.length; i++) {
if (A[i] === 0) {
return 0;
} else if (A[i] > 0) {
left = i;
right = i;
break;
}
}
let minSum = 2000000000;
while (left >= 0 && right < A.length) {
let sum = A[left] + A[right]
minSum = Math.min(minSum, Math.abs(sum));
if (sum === 0) {
return 0;
} else if (sum > 0 && left > 0) {
left--;
} else if (sum < 0 && right < A.length - 1) {
right++;
} else {
break;
}
}
return minSum;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
if (A.length === 1) {
return Math.abs(A[0]*2);
}
A.sort((a, b) => a - b);
let left = 0;
let right = 0;
for (let i = 0; i < A.length; i++) {
if (A[i] === 0) {
return 0;
} else if (A[i] > 0) {
left = i;
right = i;
break;
}
}
let minSum = 2000000000;
while (left >= 0 && right < A.length) {
let sum = A[left] + A[right]
minSum = Math.min(minSum, Math.abs(sum), Math.abs(A[left*2]));
if (sum === 0) {
return 0;
} else if (sum > 0 && left > 0) {
left--;
} else if (sum < 0 && right < A.length - 1) {
right++;
} else {
break;
}
}
return minSum;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
if (A.length === 1) {
return Math.abs(A[0]*2);
}
A.sort((a, b) => a - b);
let left = 0;
let right = 0;
for (let i = 0; i < A.length; i++) {
if (A[i] === 0) {
return 0;
} else if (A[i] > 0) {
left = i;
right = i;
break;
}
}
let minSum = 2000000000;
while (left >= 0 && right < A.length) {
let sum = A[left] + A[right]
minSum = Math.min(minSum, Math.abs(sum), Math.abs(A[left*2]), Math.abs(A[right*2]));
if (sum === 0) {
return 0;
} else if (sum > 0 && left > 0) {
left--;
} else if (sum < 0 && right < A.length - 1) {
right++;
} else {
break;
}
}
return minSum;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
if (A.length === 1) {
return Math.abs(A[0]*2);
}
A.sort((a, b) => a - b);
let left = 0;
let right = 0;
for (let i = 0; i < A.length; i++) {
if (A[i] === 0) {
return 0;
} else if (A[i] > 0) {
left = i;
right = i;
break;
}
}
let minSum = 2000000000;
while (left >= 0 && right < A.length) {
let sum = A[left] + A[right]
minSum = Math.min(minSum, Math.abs(sum), Math.abs(A[left*2]), Math.abs(A[right*2]));
if (sum === 0) {
return 0;
} else if (sum > 0 && left > 0) {
left--;
} else if (sum < 0 && right < A.length - 1) {
right++;
} else if (left > 0) {
left++;
} else {
break;
}
}
return minSum;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
if (A.length === 1) {
return Math.abs(A[0]*2);
}
A.sort((a, b) => a - b);
let left = 0;
let right = 0;
for (let i = 0; i < A.length; i++) {
if (A[i] === 0) {
return 0;
} else if (A[i] > 0) {
left = i;
right = i;
break;
}
}
let minSum = 2000000000;
while (left >= 0 && right < A.length) {
let sum = A[left] + A[right]
minSum = Math.min(minSum, Math.abs(sum), Math.abs(A[left*2]), Math.abs(A[right*2]));
if (sum === 0) {
return 0;
} else if (sum > 0 && left > 0) {
left--;
} else if (sum < 0 && right < A.length - 1) {
right++;
} else if (left > 0) {
left++;
} else {
right++;
}
}
return minSum;
}
Invalid result type, integer expected, non-integer number found
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
if (A.length === 1) {
return Math.abs(A[0]*2);
}
A.sort((a, b) => a - b);
let left = 0;
let right = 0;
for (let i = 0; i < A.length; i++) {
if (A[i] === 0) {
return 0;
} else if (A[i] > 0) {
left = i;
right = i;
break;
}
}
let minSum = 2000000000;
while (left >= 0 && right < A.length) {
let sum = A[left] + A[right]
minSum = Math.min(minSum, Math.abs(sum), Math.abs(A[left*2]), Math.abs(A[right*2]));
if (sum === 0) {
return 0;
} else if (sum > 0 && left > 0) {
left--;
} else if (sum < 0 && right < A.length - 1) {
right++;
} else if (left > 0) {
left++;
} else {
right++;
}
}
return minSum;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
if (A.length === 1) {
return Math.abs(A[0]*2);
}
A.sort((a, b) => a - b);
let left = 0;
let right = 0;
for (let i = 0; i < A.length; i++) {
if (A[i] === 0) {
return 0;
} else if (A[i] > 0) {
left = i;
right = i;
break;
}
}
let minSum = 2000000000;
while (left >= 0 && right < A.length) {
let sum = A[left] + A[right]
minSum = Math.min(minSum, Math.abs(sum), Math.abs(A[left*2]), Math.abs(A[right*2]));
if (sum === 0) {
return 0;
} else if (sum > 0 && left > 0) {
left--;
} else if (sum < 0 && right < A.length - 1) {
right++;
} else if (left > 0) {
left++;
} else {
right++;
}
}
return minSum;
}
Invalid result type, integer expected, non-integer number found
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
if (A.length === 1) {
return Math.abs(A[0]*2);
}
A.sort((a, b) => a - b);
let left = 0;
let right = 0;
for (let i = 0; i < A.length; i++) {
if (A[i] === 0) {
return 0;
} else if (A[i] > 0) {
left = i;
right = i;
break;
}
}
let minSum = 2000000000;
while (left >= 0 && right < A.length) {
let sum = A[left] + A[right]
minSum = Math.min(minSum, Math.abs(sum), Math.abs(A[left*2]), Math.abs(A[right*2]));
if (sum === 0) {
return 0;
} else if (sum > 0 && left > 0) {
left--;
} else if (sum < 0 && right < A.length - 1) {
right++;
} else if (left > 0) {
left-;
} else {
right++;
}
}
return minSum;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
if (A.length === 1) {
return Math.abs(A[0]*2);
}
A.sort((a, b) => a - b);
let left = 0;
let right = 0;
for (let i = 0; i < A.length; i++) {
if (A[i] === 0) {
return 0;
} else if (A[i] > 0) {
left = i;
right = i;
break;
}
}
let minSum = 2000000000;
while (left >= 0 && right < A.length) {
let sum = A[left] + A[right]
minSum = Math.min(minSum, Math.abs(sum), Math.abs(A[left*2]), Math.abs(A[right*2]));
if (sum === 0) {
return 0;
} else if (sum > 0 && left > 0) {
left--;
} else if (sum < 0 && right < A.length - 1) {
right++;
} else if (left > 0) {
left--;
} else {
right++;
}
}
return minSum;
}
Invalid result type, integer expected, non-integer number found
Invalid result type, integer expected, non-integer number found
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
if (A.length === 1) {
return Math.abs(A[0]*2);
}
A.sort((a, b) => a - b);
let left = 0;
let right = 0;
for (let i = 0; i < A.length; i++) {
if (A[i] === 0) {
return 0;
} else if (A[i] > 0) {
left = i;
right = i;
break;
}
}
let minSum = 2000000000;
while (left >= 0 && right < A.length) {
let sum = A[left] + A[right]
minSum = Math.min(minSum, Math.abs(sum), Math.abs(A[left] * 2), Math.abs(A[right] * 2));
if (sum === 0) {
return 0;
} else if (sum > 0 && left > 0) {
left--;
} else if (sum < 0 && right < A.length - 1) {
right++;
} else if (left > 0) {
left--;
} else {
right++;
}
}
return minSum;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
if (A.length === 1) {
return Math.abs(A[0]*2);
}
A.sort((a, b) => a - b);
let left = 0;
let right = 0;
for (let i = 0; i < A.length; i++) {
if (A[i] === 0) {
return 0;
} else if (A[i] > 0) {
left = i;
right = i;
break;
}
}
let minSum = 2000000000;
while (left >= 0 && right < A.length) {
let sum = A[left] + A[right]
minSum = Math.min(minSum, Math.abs(sum), Math.abs(A[left] * 2), Math.abs(A[right] * 2));
if (sum === 0) {
return 0;
} else if (sum > 0 && left > 0) {
left--;
} else if (sum < 0 && right < A.length - 1) {
right++;
} else if (left > 0) {
left--;
} else {
right++;
}
}
return minSum;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
if (A.length === 1) {
return Math.abs(A[0]*2);
}
A.sort((a, b) => a - b);
let left = 0;
let right = 0;
for (let i = 0; i < A.length; i++) {
if (A[i] === 0) {
return 0;
} else if (A[i] > 0) {
left = i;
right = i;
break;
}
}
let minSum = 2000000000;
while (left >= 0 && right < A.length) {
let sum = A[left] + A[right]
minSum = Math.min(minSum, Math.abs(sum), Math.abs(A[left] * 2), Math.abs(A[right] * 2));
if (sum === 0) {
return 0;
} else if (sum > 0 && left > 0) {
left--;
} else if (sum < 0 && right < A.length - 1) {
right++;
} else if (left > 0) {
left--;
} else {
right++;
}
}
return minSum;
}
[-1000000000, -999999999]
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
if (A.length === 1) {
return Math.abs(A[0]*2);
}
A.sort((a, b) => a - b);
let left = 0;
let right = 0;
for (let i = 0; i < A.length; i++) {
if (A[i] === 0) {
return 0;
} else if (A[i] > 0) {
left = i;
right = i;
break;
}
}
let minSum = 2000000000;
while (left >= 0 && right < A.length) {
let sum = A[left] + A[right]
minSum = Math.min(minSum, Math.abs(sum), Math.abs(A[left] * 2), Math.abs(A[right] * 2));
if (sum === 0) {
return 0;
} else if (sum > 0 && left > 0) {
left--;
} else if (sum < 0 && right < A.length - 1) {
right++;
} else if (left > 0) {
left--;
} else {
right++;
}
}
return minSum;
}
[-1000000000, -999999999]
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
if (A.length === 1) {
return Math.abs(A[0]*2);
}
A.sort((a, b) => a - b);
let left = 0;
let right = 0;
for (let i = 0; i < A.length; i++) {
if (A[i] === 0) {
return 0;
} else if (A[i] > 0) {
left = i;
right = i;
break;
}
}
let minSum = 2000000000;
while (left >= 0 && right < A.length) {
let sum = A[left] + A[right]
minSum = Math.min(minSum, Math.abs(sum), Math.abs(A[left] * 2), Math.abs(A[right] * 2));
if (sum === 0) {
return 0;
} else if (sum > 0 && left > 0) {
left--;
} else if (sum < 0 && right < A.length - 1) {
right++;
} else if (left > 0) {
left--;
} else {
right++;
}
}
return minSum;
}
[-1000000000, -999999999]
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
if (A.length === 1) {
return Math.abs(A[0]*2);
}
A.sort((a, b) => a - b);
let left = 0;
let right = 0;
for (let i = 0; i < A.length; i++) {
if (A[i] === 0) {
return 0;
} else if (A[i] > 0) {
left = i;
right = i;
break;
}
}
let minSum = 2000000000;
while (left >= 0 && right < A.length) {
let sum = A[left] + A[right]
minSum = Math.min(minSum, Math.abs(sum), Math.abs(A[left] * 2), Math.abs(A[right] * 2));
if (sum === 0) {
return 0;
} else if (sum > 0 && left > 0) {
left--;
} else if (sum < 0 && right < A.length - 1) {
right++;
} else if (left > 0) {
left--;
} else {
right++;
}
}
return minSum;
}
The solution obtained perfect score.