Skip to content

Commit abf4820

Browse files
committed
refactor: feat: 152. Maximum Product Subarray
1 parent 3276ce1 commit abf4820

File tree

1 file changed

+14
-22
lines changed

1 file changed

+14
-22
lines changed

maximum-product-subarray/gwbaik9717.js

Lines changed: 14 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Time complexity: O(n^2)
1+
// Time complexity: O(n)
22
// Space complexity: O(n)
33

44
/**
@@ -7,32 +7,24 @@
77
*/
88
var maxProduct = function (nums) {
99
let answer = nums[0];
10+
const products = Array.from({ length: nums.length + 1 }, () => null);
11+
products[0] = [1, 1]; // [min, max]
1012

11-
const productGroups = [[]];
13+
for (let i = 1; i < products.length; i++) {
14+
const cases = [];
1215

13-
for (let i = 0; i < nums.length; i++) {
14-
const productGroup = productGroups.at(-1);
16+
// case 1
17+
cases.push(nums[i - 1]);
1518

16-
if (nums[i] === 0) {
17-
productGroups.push([]);
18-
}
19+
// case 2
20+
cases.push(nums[i - 1] * products[i - 1][0]);
1921

20-
if (productGroup.length === 0) {
21-
productGroup.push(nums[i]);
22-
continue;
23-
}
22+
// case 3
23+
cases.push(nums[i - 1] * products[i - 1][1]);
2424

25-
productGroup.push(nums[i] * productGroup.at(-1));
26-
}
27-
28-
for (const group of productGroups) {
29-
for (let i = 0; i < group.length; i++) {
30-
answer = Math.max(answer, group[i]);
31-
32-
for (let j = 0; j < i; j++) {
33-
answer = Math.max(answer, group[i] / group[j]);
34-
}
35-
}
25+
const product = [Math.min(...cases), Math.max(...cases)];
26+
products[i] = product;
27+
answer = Math.max(answer, product[1]);
3628
}
3729

3830
return answer;

0 commit comments

Comments
 (0)