Skip to content

Commit 80e7c60

Browse files
committed
Array technique 1: prefix and suffix subarrays
1 parent 51592b0 commit 80e7c60

File tree

1 file changed

+66
-0
lines changed

1 file changed

+66
-0
lines changed

Data Structures/Array/index.js

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
/**
2+
* Get products of all other elements
3+
*
4+
* Given an array of integers, return new array such that each element at index i of
5+
* the new array is the product of all the numbers in the original array except the one at i.
6+
*/
7+
8+
function products(input) {
9+
if (input.length === 0) return [];
10+
11+
let prod = 1;
12+
for (let i = 0; i < input.length; i++) {
13+
prod *= input[i];
14+
}
15+
16+
let results = new Array(input.length).fill(null);
17+
for (let i = 0; i < input.length; i++) {
18+
results[i] = prod / input[i];
19+
}
20+
21+
return results;
22+
}
23+
24+
console.log(products([1, 2, 3, 4, 5]));
25+
26+
function productsFollowingUp(input) {
27+
if (input.length === 0) return [];
28+
29+
// Precomputing prefix sum
30+
let prefix = new Array(input.length).fill(null);
31+
for (let i = 0; i < input.length; i++) {
32+
if (prefix[i - 1]) {
33+
prefix[i] = prefix[i - 1] * input[i];
34+
} else {
35+
prefix[i] = input[i];
36+
}
37+
}
38+
39+
// Precomputing suffix sum
40+
let suffix = new Array(input.length).fill(null);
41+
let reverseInput = input.reverse();
42+
for (let i = 0; i < reverseInput.length; i++) {
43+
if (suffix[i - 1]) {
44+
suffix[i] = suffix[i - 1] * reverseInput[i];
45+
} else {
46+
suffix[i] = reverseInput[i];
47+
}
48+
}
49+
suffix.reverse();
50+
51+
// Compute the results based on subarray results
52+
let results = new Array(input.length).fill(null);
53+
for (let i = 0; i < results.length; i++) {
54+
if (i === 0) {
55+
results[i] = suffix[i + 1];
56+
} else if (i === results.length - 1) {
57+
results[i] = prefix[i - 1];
58+
} else {
59+
results[i] = prefix[i - 1] * suffix[i + 1];
60+
}
61+
}
62+
63+
return results;
64+
}
65+
66+
console.log(productsFollowingUp([1, 2, 3, 4, 5]));

0 commit comments

Comments
 (0)