From 3918dba5037f2fc298dc537f21733a4da0b674bd Mon Sep 17 00:00:00 2001 From: Hiro Funatsuka Date: Tue, 5 May 2026 22:02:37 +0900 Subject: [PATCH] Solve maximum subarray --- 53_maximum_subarray/problem.md | 1 + 53_maximum_subarray/step1.md | 20 ++++++++++++++++++++ 53_maximum_subarray/step2.md | 17 +++++++++++++++++ 53_maximum_subarray/step3.md | 19 +++++++++++++++++++ 4 files changed, 57 insertions(+) create mode 100644 53_maximum_subarray/problem.md create mode 100644 53_maximum_subarray/step1.md create mode 100644 53_maximum_subarray/step2.md create mode 100644 53_maximum_subarray/step3.md diff --git a/53_maximum_subarray/problem.md b/53_maximum_subarray/problem.md new file mode 100644 index 0000000..450872c --- /dev/null +++ b/53_maximum_subarray/problem.md @@ -0,0 +1 @@ +## 問題: [53. Maximum Subarray](https://leetcode.com/problems/maximum-subarray/description/) diff --git a/53_maximum_subarray/step1.md b/53_maximum_subarray/step1.md new file mode 100644 index 0000000..16d1fc3 --- /dev/null +++ b/53_maximum_subarray/step1.md @@ -0,0 +1,20 @@ +# Step 1 + +- Kadaneのアルゴリズムを使う + +```python +class Solution: + def maxSubArray(self, nums: List[int]) -> int: + largest_sum = -float('inf') + current_sum = 0 + for num in nums: + current_sum = max(current_sum, 0) + current_sum += num + largest_sum = max(largest_sum, current_sum) + return largest_sum + +``` + +時間計算量: $O(n)$ + +空間計算量: $O(1)$ diff --git a/53_maximum_subarray/step2.md b/53_maximum_subarray/step2.md new file mode 100644 index 0000000..c3e3da0 --- /dev/null +++ b/53_maximum_subarray/step2.md @@ -0,0 +1,17 @@ +# Step 2 + +```python +class Solution: + def maxSubArray(self, nums: List[int]) -> int: + largest_sum = -float('inf') + current_sum = 0 + for num in nums: + current_sum = max(current_sum, 0) + num + largest_sum = max(largest_sum, current_sum) + return largest_sum + +``` + +時間計算量: $O(n)$ + +空間計算量: $O(1)$ diff --git a/53_maximum_subarray/step3.md b/53_maximum_subarray/step3.md new file mode 100644 index 0000000..8a8a723 --- /dev/null +++ b/53_maximum_subarray/step3.md @@ -0,0 +1,19 @@ +# Step 3 + +```python +class Solution: + def maxSubArray(self, nums: List[int]) -> int: + largest_sum = -float('inf') + current_sum = 0 + for num in nums: + current_sum = max(current_sum, 0) + num + largest_sum = max(largest_sum, current_sum) + return largest_sum + +``` + +1回目: 1分 26秒 + +2回目: 1分 8秒 + +3回目: 1分 5秒