From b867298ebb411d9f2b57d0f6fdb086962d5c1705 Mon Sep 17 00:00:00 2001 From: BangDori Date: Wed, 28 May 2025 01:10:12 +0900 Subject: [PATCH] =?UTF-8?q?[=EA=B0=95=EB=B3=91=EC=A4=80]=20Maximum=20Produ?= =?UTF-8?q?ct=20Subarray?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bangdori/152.js | 56 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 bangdori/152.js diff --git a/bangdori/152.js b/bangdori/152.js new file mode 100644 index 0000000..fd253c3 --- /dev/null +++ b/bangdori/152.js @@ -0,0 +1,56 @@ +/** + * @param {number[]} nums + * @return {number} + */ +var maxProduct = function (nums) { + const segments = splitByZero(nums); + let maxProduct = Number.NEGATIVE_INFINITY; + + for (const segment of segments) { + const currentProduct = maxProductOfSegment(segment); + maxProduct = Math.max(maxProduct, currentProduct); + } + + if (nums.includes(0)) maxProduct = Math.max(maxProduct, 0); + + return maxProduct; +}; + +function splitByZero(nums) { + const result = []; + let current = []; + + for (const num of nums) { + if (num === 0) { + result.push(current); + current = []; + } else { + current.push(num); + } + } + + result.push(current); + return result.filter((array) => array.length > 0); +} + +function maxProductOfSegment(nums) { + let maxProduct = Number.NEGATIVE_INFINITY; + + let currentProduct = 1; + for (let i = 0; i < nums.length; i++) { + currentProduct *= nums[i]; + maxProduct = Math.max(maxProduct, currentProduct); + + if (currentProduct === 0) currentProduct = 1; + } + + currentProduct = 1; + for (let i = nums.length - 1; i >= 0; i--) { + currentProduct *= nums[i]; + maxProduct = Math.max(maxProduct, currentProduct); + + if (currentProduct === 0) currentProduct = 1; + } + + return maxProduct; +}