From 0c1c1145533f1365c78e9e8fce663195ee096984 Mon Sep 17 00:00:00 2001 From: tom4649 Date: Wed, 17 Jun 2026 05:30:12 +0900 Subject: [PATCH] Step1,2 --- 0088.Merge-Sorted-Array/memo.md | 26 +++++++++++++++++++ 0088.Merge-Sorted-Array/step1.py | 11 ++++++++ 0088.Merge-Sorted-Array/step2.py | 11 ++++++++ .../step2_edge_case_handling.py | 19 ++++++++++++++ 0088.Merge-Sorted-Array/step2_merge_sortpy | 12 +++++++++ 5 files changed, 79 insertions(+) create mode 100644 0088.Merge-Sorted-Array/memo.md create mode 100644 0088.Merge-Sorted-Array/step1.py create mode 100644 0088.Merge-Sorted-Array/step2.py create mode 100644 0088.Merge-Sorted-Array/step2_edge_case_handling.py create mode 100644 0088.Merge-Sorted-Array/step2_merge_sortpy diff --git a/0088.Merge-Sorted-Array/memo.md b/0088.Merge-Sorted-Array/memo.md new file mode 100644 index 0000000..3a7672e --- /dev/null +++ b/0088.Merge-Sorted-Array/memo.md @@ -0,0 +1,26 @@ +# 88. Merge Sorted Array + +## step1 + +4mほど。マージソートとは設定が異なるようだ。配列の末尾から並べていくことがポイント。 + +## step2 + +条件分岐に不要なところがあったので改善。 + +merge sortに近いものも書く。 + +## 他の人のコード + +https://github.com/sota009/swe-coding-practice/pull/1 + +> あってもいいと思います。m == 0 のほうは私は消すかもしれません。書き終わった直後に、これなくてもいいですかね、とコメントするとわりと読み慣れている人だなと思います。 + +色々と考えてコードを書いている。 + +> "In many ways the object returned by range() behaves as if it is a list, but in fact it isn't. It is an object which returns the successive items of the desired sequence when you iterate over it, but it doesn't really make the list, thus saving space." https://docs.python.org/3/tutorial/controlflow.html + +スペースは食わないみたい + +## step3 +今回は省略 diff --git a/0088.Merge-Sorted-Array/step1.py b/0088.Merge-Sorted-Array/step1.py new file mode 100644 index 0000000..25281b0 --- /dev/null +++ b/0088.Merge-Sorted-Array/step1.py @@ -0,0 +1,11 @@ +class Solution: + def merge(self, nums1: list[int], m: int, nums2: list[int], n: int) -> None: + i = m - 1 + j = n - 1 + while i >= 0 or j >= 0: + if i >= 0 and (j < 0 or nums1[i] > nums2[j]): + nums1[i + j + 1] = nums1[i] + i -= 1 + else: + nums1[i + j + 1] = nums2[j] + j -= 1 diff --git a/0088.Merge-Sorted-Array/step2.py b/0088.Merge-Sorted-Array/step2.py new file mode 100644 index 0000000..7a03291 --- /dev/null +++ b/0088.Merge-Sorted-Array/step2.py @@ -0,0 +1,11 @@ +class Solution: + def merge(self, nums1: list[int], m: int, nums2: list[int], n: int) -> None: + i = m - 1 + j = n - 1 + while j >= 0: + if i >= 0 and nums1[i] > nums2[j]: + nums1[i + j + 1] = nums1[i] + i -= 1 + else: + nums1[i + j + 1] = nums2[j] + j -= 1 diff --git a/0088.Merge-Sorted-Array/step2_edge_case_handling.py b/0088.Merge-Sorted-Array/step2_edge_case_handling.py new file mode 100644 index 0000000..963228f --- /dev/null +++ b/0088.Merge-Sorted-Array/step2_edge_case_handling.py @@ -0,0 +1,19 @@ +class Solution: + def merge(self, nums1: list[int], m: int, nums2: list[int], n: int) -> None: + if m == 0: + nums1[:] = nums2 + return + if n == 0: + return + + read1 = m - 1 + read2 = n - 1 + write_index = m + n - 1 + while read2 >= 0: + if read1 >= 0 and nums1[read1] > nums2[read2]: + nums1[write_index] = nums1[read1] + read1 -= 1 + else: + nums1[write_index] = nums2[read2] + read2 -= 1 + write_index -= 1 diff --git a/0088.Merge-Sorted-Array/step2_merge_sortpy b/0088.Merge-Sorted-Array/step2_merge_sortpy new file mode 100644 index 0000000..5c3ad11 --- /dev/null +++ b/0088.Merge-Sorted-Array/step2_merge_sortpy @@ -0,0 +1,12 @@ +class Solution: + def merge(self, nums1: list[int], m: int, nums2: list[int], n: int) -> None: + nums1_copy = nums1[:m] + i = 0 + j = 0 + while i < m or j < n: + if j >= n or (i < m and nums1_copy[i] <= nums2[j]): + nums1[i + j] = nums1_copy[i] + i += 1 + else: + nums1[i + j] = nums2[j] + j += 1