From 3a821e9136c6d3efa9ac8c24d82a2cef03dcb5be Mon Sep 17 00:00:00 2001 From: Tomoki Sadamori Date: Fri, 17 Jul 2026 20:51:51 +0900 Subject: [PATCH 1/3] =?UTF-8?q?Step1=E7=B5=82=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 0001-two-sum.md | 3 +++ step1.py | 27 +++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 0001-two-sum.md create mode 100644 step1.py diff --git a/0001-two-sum.md b/0001-two-sum.md new file mode 100644 index 0000000..50d7bcc --- /dev/null +++ b/0001-two-sum.md @@ -0,0 +1,3 @@ +# 1. Two Sum + +## Step1 diff --git a/step1.py b/step1.py new file mode 100644 index 0000000..383af92 --- /dev/null +++ b/step1.py @@ -0,0 +1,27 @@ +from typing import List + + +class Solution: + def twoSum(self, nums: List[int], target: int) -> List[int]: + i = 0 + while i < len(nums) - 1: + j = i + 1 + while j < len(nums): + if nums[i] + nums[j] == target: + return [i, j] + j += 1 + i += 1 + + return [] + + +def main() -> None: + nums = [3, 2, 4] + target = 6 + Solver = Solution() + res = Solver.twoSum(nums, target) + print(res) + + +if __name__ == "__main__": + main() From e2b065782257e7e8becaf73baf5c706c406f502e Mon Sep 17 00:00:00 2001 From: "T.Sadamori" Date: Sat, 18 Jul 2026 01:26:18 +0900 Subject: [PATCH 2/3] =?UTF-8?q?step=203=E3=81=BE=E3=81=A7=E7=B5=82?= =?UTF-8?q?=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 0001-two-sum/memo.md | 49 +++++++++++++++++++++++++++++++++++++++++++ 0001-two-sum/step1.py | 27 ++++++++++++++++++++++++ 0001-two-sum/step2.py | 10 +++++++++ 3 files changed, 86 insertions(+) create mode 100644 0001-two-sum/memo.md create mode 100644 0001-two-sum/step1.py create mode 100644 0001-two-sum/step2.py diff --git a/0001-two-sum/memo.md b/0001-two-sum/memo.md new file mode 100644 index 0000000..9e3808b --- /dev/null +++ b/0001-two-sum/memo.md @@ -0,0 +1,49 @@ +# 1. Two Sum + +## Step 1 +- 二重ループじゃ良くないなと思いつつ総当たりしか思いつきませんでした。 +- 計算量はO(n^2)。 + +```python +class Solution: + def twoSum(self, nums: List[int], target: int) -> List[int]: + i = 0 + while i < len(nums) - 1: + j = i + 1 + while j < len(nums): + if nums[i] + nums[j] == target: + return [i, j] + j += 1 + i += 1 + + return [] +``` + +## Step 2 +- dictに今まで見た数とそのインデックスを登録しながら、新しい数に対して +欲しい差分がdictにないかチェックしていく。 +- 線形探索で舐めていき、差分の確認はハッシュマップの確認で基本O(1)なので +トータルはO(n)。 +- チェイン法のハッシュマップはハッシュ値 mod 配列長が等しいと +そこでリストを作る(アルゴリズム図鑑)のでO(1)とは限らないらしい。 +そのうちPythonの辞書の実装を見てみたい。 +- enumurate()を初めて知る。 +- エラーケースに自分は空リストを返していたが、先達にあった +raise ValueErrorのほうがベターだと思い変更。 + +```python +class Solution: + def twoSum(self, nums: List[int], target: int) -> List[int]: + num_to_index = {} + for i, num in enumerate(nums): + diff = target - num + if diff in num_to_index: + return [num_to_index[diff], i] + num_to_index[num] = i + + raise ValueError("can't find the solution") +``` + +## Step 3 +- Step 2のコードを三回再現。 +- num_to_indexがnum_to_idxになったくらいだった。 diff --git a/0001-two-sum/step1.py b/0001-two-sum/step1.py new file mode 100644 index 0000000..383af92 --- /dev/null +++ b/0001-two-sum/step1.py @@ -0,0 +1,27 @@ +from typing import List + + +class Solution: + def twoSum(self, nums: List[int], target: int) -> List[int]: + i = 0 + while i < len(nums) - 1: + j = i + 1 + while j < len(nums): + if nums[i] + nums[j] == target: + return [i, j] + j += 1 + i += 1 + + return [] + + +def main() -> None: + nums = [3, 2, 4] + target = 6 + Solver = Solution() + res = Solver.twoSum(nums, target) + print(res) + + +if __name__ == "__main__": + main() diff --git a/0001-two-sum/step2.py b/0001-two-sum/step2.py new file mode 100644 index 0000000..9d65623 --- /dev/null +++ b/0001-two-sum/step2.py @@ -0,0 +1,10 @@ +class Solution: + def twoSum(self, nums: List[int], target: int) -> List[int]: + num_to_index: dict[int, int] = {} + for i, num in enumerate(nums): + diff = target - num + if diff in num_to_index: + return [num_to_index[diff], i] + num_to_index[num] = i + + raise ValueError("can't find the solution") From 7d3bc22668e065273a8a368d927a263aa6b88ed1 Mon Sep 17 00:00:00 2001 From: "T.Sadamori" Date: Sat, 18 Jul 2026 01:33:10 +0900 Subject: [PATCH 3/3] =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB?= =?UTF-8?q?=E3=82=92=E3=83=AB=E3=83=BC=E3=83=88=E3=81=8B=E3=82=89=E5=95=8F?= =?UTF-8?q?=E9=A1=8C=E3=83=87=E3=82=A3=E3=83=AC=E3=82=AF=E3=83=88=E3=83=AA?= =?UTF-8?q?=E3=81=AB=E7=A7=BB=E5=8B=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 0001-two-sum.md | 3 --- step1.py | 27 --------------------------- 2 files changed, 30 deletions(-) delete mode 100644 0001-two-sum.md delete mode 100644 step1.py diff --git a/0001-two-sum.md b/0001-two-sum.md deleted file mode 100644 index 50d7bcc..0000000 --- a/0001-two-sum.md +++ /dev/null @@ -1,3 +0,0 @@ -# 1. Two Sum - -## Step1 diff --git a/step1.py b/step1.py deleted file mode 100644 index 383af92..0000000 --- a/step1.py +++ /dev/null @@ -1,27 +0,0 @@ -from typing import List - - -class Solution: - def twoSum(self, nums: List[int], target: int) -> List[int]: - i = 0 - while i < len(nums) - 1: - j = i + 1 - while j < len(nums): - if nums[i] + nums[j] == target: - return [i, j] - j += 1 - i += 1 - - return [] - - -def main() -> None: - nums = [3, 2, 4] - target = 6 - Solver = Solution() - res = Solver.twoSum(nums, target) - print(res) - - -if __name__ == "__main__": - main()