From 22f92b78b4039a0853770dc2866dfde0d429769e Mon Sep 17 00:00:00 2001 From: shintaroyoshida20 Date: Tue, 10 Jun 2025 08:56:20 +0900 Subject: [PATCH 1/2] add the STEP1 --- .../array/maximum-product-subarray/answer.md | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 blind75/array/maximum-product-subarray/answer.md diff --git a/blind75/array/maximum-product-subarray/answer.md b/blind75/array/maximum-product-subarray/answer.md new file mode 100644 index 0000000..04acd0b --- /dev/null +++ b/blind75/array/maximum-product-subarray/answer.md @@ -0,0 +1,78 @@ +# 152. Maximum Product Subarray + +## STEP1 + +### 発想 + +### 想定されるユースケース + +### 何が分からなかったか? + +```javascript +const maxProduct = function(nums) { + // use prefix product. + let maxProduct = -Infinity + for (let i = 0; i< nums.length; i++) { + let currentProduct = 1 + for (let j = i; j < nums.length; j++) { + currentProduct *= nums[j] + maxProduct = Math.max(maxProduct, currentProduct) + } + } + return maxProduct +}; +``` + +- LeetCodeの解法を見た。 +- 最大に加えて、最小を残すという方法が思いつかなかった。 + +``` +const maxProduct = function(nums) { + let minSoFar = nums[0] + let maxSoFar = nums[0] + let maxProduct = nums[0] + for (let i = 1; i < nums.length; i++) { + const num = nums[i] + maxProductCandidate1 = Math.max(minSoFar * num, maxSoFar * num) + maxProductCandidate2 = Math.max(maxProduct, num) + maxProduct = Math.max(maxProductCandidate1, maxProductCandidate2) + + minSoFar = Math.min(num, Math.min(minSoFar * num, maxSoFar * num)) + maxSoFar = Math.max(num, Math.max(minSoFar * num, maxSoFar * num)) + } + return maxProduct +} +``` +## STEP2 + +```javascript +``` + +## STEP3 + +```javascript +``` + +## 感想 + +### コメント集を読んで + +## 他の人のPRを読んで + +## その他の方法 + +### コードの良し悪し + +* `*0` + * 時間計算量: + * 空間計算量: + +* `*1` + * 時間計算量: + * 空間計算量: + +* `*2` + * 時間計算量: + * 空間計算量: + +## 調べたこと From 281dc85b49aa0eb4a328168fefa884b29bbf0736 Mon Sep 17 00:00:00 2001 From: shintaroyoshida20 Date: Tue, 10 Jun 2025 09:03:55 +0900 Subject: [PATCH 2/2] add the wrong code and correct code in STEP1 --- .../array/maximum-product-subarray/answer.md | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/blind75/array/maximum-product-subarray/answer.md b/blind75/array/maximum-product-subarray/answer.md index 04acd0b..aee071c 100644 --- a/blind75/array/maximum-product-subarray/answer.md +++ b/blind75/array/maximum-product-subarray/answer.md @@ -26,7 +26,8 @@ const maxProduct = function(nums) { - LeetCodeの解法を見た。 - 最大に加えて、最小を残すという方法が思いつかなかった。 -``` +- 動かなかった時のコード +```javascript const maxProduct = function(nums) { let minSoFar = nums[0] let maxSoFar = nums[0] @@ -43,6 +44,23 @@ const maxProduct = function(nums) { return maxProduct } ``` +- 正しい時のコード +```javascript +const maxProduct = function(nums) { + let minSoFar = nums[0] + let maxSoFar = nums[0] + let maxProduct = nums[0] + for (let i = 1; i < nums.length; i++) { + const num = nums[i] + const tempMaxSoFar = Math.max(num, Math.max(minSoFar * num, maxSoFar * num)) + maxProduct = Math.max(maxProduct, tempMaxSoFar) + + minSoFar = Math.min(num, Math.min(minSoFar * num, maxSoFar * num)) + maxSoFar = tempMaxSoFar + } + return maxProduct +} +``` ## STEP2 ```javascript