Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions 0088.Merge-Sorted-Array/memo.md
Original file line number Diff line number Diff line change
@@ -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
今回は省略
11 changes: 11 additions & 0 deletions 0088.Merge-Sorted-Array/step1.py
Original file line number Diff line number Diff line change
@@ -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
11 changes: 11 additions & 0 deletions 0088.Merge-Sorted-Array/step2.py
Original file line number Diff line number Diff line change
@@ -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
19 changes: 19 additions & 0 deletions 0088.Merge-Sorted-Array/step2_edge_case_handling.py
Original file line number Diff line number Diff line change
@@ -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
12 changes: 12 additions & 0 deletions 0088.Merge-Sorted-Array/step2_merge_sortpy
Original file line number Diff line number Diff line change
@@ -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