File tree Expand file tree Collapse file tree
Algorithm/Sort/MergeSort/leetcode/claude 4.6 sonnet extended/88. Merge Sorted Array
public/Algorithm/Sort/MergeSort/leetcode/claude 4.6 sonnet extended/88. Merge Sorted Array Expand file tree Collapse file tree Original file line number Diff line number Diff line change 22
33### 競技プログラミング視点
44
5- ` nums1 ` の末尾から逆順に埋める3ポインタ法が最適。CPython では ` list ` のインデックスアクセスは O(1) の C 実装であり、追加リスト生成ゼロ・ヒープアロケーションゼロで O(m+n) を達成できます。
5+ ` nums1 ` の末尾から逆順に埋める3ポインタ法が最適。CPython では ` list ` のインデックスアクセスは O(1) の C 実装であり、本実装のようにスライス代入を用いると最悪ケース O(n) の追加空間を消費しますが、時間計算量 O(m+n) を達成できます。
66
77### 業務開発視点
88
Original file line number Diff line number Diff line change @@ -21,7 +21,7 @@ LeetCode の関数シグネチャは `&mut Vec<i32>` の受け渡しを強制し
2121| アプローチ | 時間計算量 | 空間計算量 | Rust実装コスト | 安全性 | 可読性 | 備考 |
2222| --------------------------- | ---------------- | ---------- | -------------- | ------ | ------ | ------------------------- |
2323| 後ろからマージ(3ポインタ) | O(m+n) | O(1) | 低 | 高 | 高 | 追加アロケーションなし ✅ |
24- | 前からコピー後ソート | O((m+n)log(m+n)) | O(1) | 低 | 高 | 高 | 標準の ` .sort() ` 利用可 |
24+ | 前からコピー後ソート | O((m+n)log(m+n)) | O(m+n) | 低 | 高 | 高 | 標準の ` .sort() ` 利用可 |
2525| 一時バッファにコピー | O(m+n) | O(m) | 低 | 高 | 中 | Vec への clone が発生 |
2626
2727---
Original file line number Diff line number Diff line change @@ -21,7 +21,7 @@ LeetCode のシグネチャは `void` 返却の破壊的操作ですが、TypeSc
2121| アプローチ | 時間計算量 | 空間計算量 | TS実装コスト | 型安全性 | 可読性 | 備考 |
2222| --------------------------- | ---------------- | ---------- | ------------ | -------- | ------ | -------------------------- |
2323| 後ろからマージ(3ポインタ) | O(m+n) | O(1) | 低 | 高 | 高 | 追加アロケーションなし ✅ |
24- | コピー後 ` .sort() ` | O((m+n)log(m+n)) | O(1) | 最低 | 高 | 最高 | 比較関数必須・競技では次善 |
24+ | コピー後 ` .sort() ` | O((m+n)log(m+n)) | O(m+n) | 最低 | 高 | 最高 | 比較関数必須・競技では次善 |
2525| 一時バッファにコピー | O(m+n) | O(m) | 低 | 高 | 中 | スプレッド構文でヒープ確保 |
2626
2727---
Original file line number Diff line number Diff line change @@ -324,4 +324,4 @@ if n == 0:
324324
325325` from __future__ import annotations ` を使用することで、
326326型アノテーションの評価が ** 遅延評価(文字列化)** になり、
327- 実行時のインポートオーバーヘッドを最小化する。
327+ 実行時のインポートオーバーヘッドを最小化する。
Original file line number Diff line number Diff line change @@ -652,7 +652,7 @@ <h3 class="text-teal-800 font-bold text-lg mb-3">核心アイデア</h3>
652652 font-size ="12 "
653653 fill ="#475569 "
654654 >
655- nums1[:j+1 ] = nums2[:j+1]
655+ while j >= 0: nums1[k ] = nums2[j]; k--; j--
656656 </ text >
657657
658658 < line
@@ -753,7 +753,7 @@ <h3 class="text-teal-800 font-bold text-lg mb-3">核心アイデア</h3>
753753 コピー後 .sort()
754754 </ td >
755755 < td class ="px-4 py-3 mono text-slate-600 "> O((m+n) log(m+n))</ td >
756- < td class ="px-4 py-3 mono text-slate-600 "> O(1 )</ td >
756+ < td class ="px-4 py-3 mono text-slate-600 "> O(m+n )</ td >
757757 < td class ="px-4 py-3 text-slate-600 "> 実装最短だが計算量で劣る</ td >
758758 </ tr >
759759 < tr class ="border-b border-slate-100 ">
@@ -1331,19 +1331,19 @@ <h3 className="mt-0 text-teal-800 text-lg font-bold mb-2">
13311331 let k: number = m + n - 1; // 書き込み位置ポインタ (k >= i が常に成立)
13321332
13331333 while (i >= 0 && j >= 0) {
1334- if (nums1[i] >= nums2[j]) {
1335- nums1[k] = nums1[i];
1334+ if (nums1[i]! >= nums2[j]! ) {
1335+ nums1[k] = nums1[i]! ;
13361336 i--;
13371337 } else {
1338- nums1[k] = nums2[j];
1338+ nums1[k] = nums2[j]! ;
13391339 j--;
13401340 }
13411341 k--;
13421342 }
13431343
13441344 // nums2 の残余コピー (nums1 の残余は移動不要)
13451345 while (j >= 0) {
1346- nums1[k--] = nums2[j--];
1346+ nums1[k--] = nums2[j--]! ;
13471347 }
13481348}` ,
13491349
Original file line number Diff line number Diff line change @@ -652,7 +652,7 @@ <h3 class="text-teal-800 font-bold text-lg mb-3">核心アイデア</h3>
652652 font-size ="12 "
653653 fill ="#475569 "
654654 >
655- nums1[:j+1 ] = nums2[:j+1]
655+ while j >= 0: nums1[k ] = nums2[j]; k--; j--
656656 </ text >
657657
658658 < line
@@ -753,7 +753,7 @@ <h3 class="text-teal-800 font-bold text-lg mb-3">核心アイデア</h3>
753753 コピー後 .sort()
754754 </ td >
755755 < td class ="px-4 py-3 mono text-slate-600 "> O((m+n) log(m+n))</ td >
756- < td class ="px-4 py-3 mono text-slate-600 "> O(1 )</ td >
756+ < td class ="px-4 py-3 mono text-slate-600 "> O(m+n )</ td >
757757 < td class ="px-4 py-3 text-slate-600 "> 実装最短だが計算量で劣る</ td >
758758 </ tr >
759759 < tr class ="border-b border-slate-100 ">
@@ -1331,19 +1331,19 @@ <h3 className="mt-0 text-teal-800 text-lg font-bold mb-2">
13311331 let k: number = m + n - 1; // 書き込み位置ポインタ (k >= i が常に成立)
13321332
13331333 while (i >= 0 && j >= 0) {
1334- if (nums1[i] >= nums2[j]) {
1335- nums1[k] = nums1[i];
1334+ if (nums1[i]! >= nums2[j]! ) {
1335+ nums1[k] = nums1[i]! ;
13361336 i--;
13371337 } else {
1338- nums1[k] = nums2[j];
1338+ nums1[k] = nums2[j]! ;
13391339 j--;
13401340 }
13411341 k--;
13421342 }
13431343
13441344 // nums2 の残余コピー (nums1 の残余は移動不要)
13451345 while (j >= 0) {
1346- nums1[k--] = nums2[j--];
1346+ nums1[k--] = nums2[j--]! ;
13471347 }
13481348}` ,
13491349
You can’t perform that action at this time.
0 commit comments