Skip to content

Commit d125942

Browse files
authored
Merge pull request #256 from myoshi2891/dev-from-macmini
Fix code review issues and SRI hashes for LeetCode 2625 solution
2 parents 98b2470 + daf03ee commit d125942

2 files changed

Lines changed: 63 additions & 30 deletions

File tree

JavaScript/2625. Flatten Deeply Nested Array/Claude Code Sonnet 4.5 extended/FlattenDeeplyNestedArray_TS.ipynb

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
"|---------|----------|-----------|------------|---------|-------|-----|\n",
3131
"| 再帰的展開 | O(N) | O(N + D) | 低 | 高 | 高 | N=全要素数、D=深さ。最も直感的 |\n",
3232
"| スタック反復 | O(N) | O(N + D) | 中 | 高 | 中 | スタックオーバーフロー回避可能 |\n",
33-
"| reduce連鎖 | O(N) | O(N + D) | 中 | 中 | 中 | 関数型スタイル、やや複雑 |\n",
33+
"| reduce連鎖 | O(N²) | O(N + D) | 中 | 中 | 中 | 関数型スタイル、やや複雑 |\n",
3434
"\n",
3535
"## 3. 選択したアルゴリズムと理由\n",
3636
"\n",
@@ -63,7 +63,7 @@
6363
" * @param arr - 平坦化する多次元配列\n",
6464
" * @param n - 平坦化する深さ(0の場合は平坦化しない)\n",
6565
" * @returns 平坦化された配列\n",
66-
" * @complexity Time: O(N), Space: O(N + D) - N:全要素数, D:深さ\n",
66+
" * @complexity Time: O(N²), Space: O(N + D) - N:全要素数, D:深さ\n",
6767
" */\n",
6868
"var flat = function (arr: MultiDimensionalArray, n: number): MultiDimensionalArray {\n",
6969
" // n = 0 の場合は平坦化不要\n",
@@ -98,7 +98,7 @@
9898
"\n",
9999
"/**\n",
100100
" * reduceを使った関数型スタイルの実装\n",
101-
" * @complexity Time: O(N), Space: O(N + D)\n",
101+
" * @complexity Time: O(N²), Space: O(N + D)\n",
102102
" */\n",
103103
"var flatReduce = function (arr: MultiDimensionalArray, n: number): MultiDimensionalArray {\n",
104104
" if (n === 0) return arr;\n",
@@ -123,7 +123,7 @@
123123
"\n",
124124
"/**\n",
125125
" * 反復的なスタックベース実装(大規模データ対応)\n",
126-
" * @complexity Time: O(N), Space: O(N + D)\n",
126+
" * @complexity Time: O(N²), Space: O(N + D)\n",
127127
" */\n",
128128
"var flatIterative = function (arr: MultiDimensionalArray, n: number): MultiDimensionalArray {\n",
129129
" const result: MultiDimensionalArray = [];\n",
@@ -175,7 +175,7 @@
175175
"### パフォーマンス考察\n",
176176
"\n",
177177
"- **再帰呼び出しコスト**: 現代のJSエンジンは末尾再帰最適化を持たないが、制約範囲(depth ≤ 1000)では問題なし\n",
178-
"- **配列操作**: `push(...array)` は一度に複数要素を追加するため、ループより効率的\n",
178+
"- **配列操作**: `push(...array)` はスプレッド展開により内部で配列を反復・割り当てするため、ホットパスでは明示的なループより遅い場合がある(本実装では `push(...flattened)` を要素ごとの `push` に変更することで156ms→80msに改善)\n",
179179
"- **メモリ**: 結果配列は避けられないO(N)。コールスタックはO(D)で十分小さい"
180180
]
181181
},
@@ -522,12 +522,6 @@
522522
"| スタック初期化 | `[[arr, 0]]` | `arr` の各要素を個別に `[arr[i], 0]` として追加 |\n",
523523
"| depth判定 | `if (depth < n)` のみ | `if (Array.isArray(item) && depth < n)` |\n"
524524
]
525-
},
526-
{
527-
"cell_type": "markdown",
528-
"id": "253e2ebb",
529-
"metadata": {},
530-
"source": []
531525
}
532526
],
533527
"metadata": {
@@ -545,4 +539,4 @@
545539
},
546540
"nbformat": 4,
547541
"nbformat_minor": 5
548-
}
542+
}

JavaScript/2625. Flatten Deeply Nested Array/Claude Code Sonnet 4.5 extended/README_react.html

Lines changed: 57 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -20,25 +20,40 @@
2020
<link
2121
rel="stylesheet"
2222
href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/themes/prism-tomorrow.min.css"
23+
integrity="sha384-wFjoQjtV1y5jVHbt0p35Ui8aV8GVpEZkyF99OXWqP/eNJDU93D3Ugxkoyh6Y2I4A"
24+
crossorigin="anonymous"
2325
/>
2426
<link
2527
rel="stylesheet"
2628
href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/line-numbers/prism-line-numbers.min.css"
29+
integrity="sha384-nUkTNLI8COlMCRJ0FHIdX76If83145OTCLUx4gQyfnO0gGeO/sD9czGEUBxtkcUv"
30+
crossorigin="anonymous"
2731
/>
2832
<link
2933
rel="stylesheet"
3034
href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/toolbar/prism-toolbar.min.css"
35+
integrity="sha384-EUzJ34/1CCeefTGUKLgvA5Z/vYIwi+Jyu8aAaCfFDxfwZ3Xs3OfkkIeegsLRM11e"
36+
crossorigin="anonymous"
3137
/>
3238

33-
<!-- React & ReactDOM -->
34-
<script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script>
39+
<!-- React & ReactDOM (Production) -->
3540
<script
36-
crossorigin
37-
src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"
41+
crossorigin="anonymous"
42+
src="https://unpkg.com/react@18.3.1/umd/react.production.min.js"
43+
integrity="sha384-DGyLxAyjq0f9SPpVevD6IgztCFlnMF6oW/XQGmfe+IsZ8TqEiDrcHkMLKI6fiB/Z"
44+
></script>
45+
<script
46+
crossorigin="anonymous"
47+
src="https://unpkg.com/react-dom@18.3.1/umd/react-dom.production.min.js"
48+
integrity="sha384-gTGxhz21lVGYNMcdJOyq01Edg0jhn/c22nsx0kyqP0TxaV5WVdsSH1fSDUf5YJj1"
3849
></script>
3950

4051
<!-- Babel Standalone -->
41-
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
52+
<script
53+
src="https://unpkg.com/@babel/standalone@7.26.9/babel.min.js"
54+
integrity="sha384-pKNXKj7jF9BNMkQyGWg5YLfoPyqBa/gf7wjTSoTGQlwxbZB+sabJuKyOHR6JQvTd"
55+
crossorigin="anonymous"
56+
></script>
4257

4358
<style>
4459
* {
@@ -773,7 +788,7 @@ <h4 class="font-bold text-slate-800 mb-2">4. エッジケース</h4>
773788
stroke-dasharray="8,4"
774789
/>
775790
<rect
776-
x="775"
791+
x="755"
777792
y="450"
778793
width="120"
779794
height="32"
@@ -783,7 +798,7 @@ <h4 class="font-bold text-slate-800 mb-2">4. エッジケース</h4>
783798
stroke-width="2"
784799
/>
785800
<text
786-
x="835"
801+
x="815"
787802
y="466"
788803
text-anchor="middle"
789804
dominant-baseline="middle"
@@ -1095,12 +1110,36 @@ <h4 class="font-bold text-orange-900 mb-2">💡 最適化の考察</h4>
10951110
</div>
10961111

10971112
<!-- Prism.js Scripts -->
1098-
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/prism.min.js"></script>
1099-
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/line-numbers/prism-line-numbers.min.js"></script>
1100-
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/toolbar/prism-toolbar.min.js"></script>
1101-
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/copy-to-clipboard/prism-copy-to-clipboard.min.js"></script>
1102-
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-typescript.min.js"></script>
1103-
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-javascript.min.js"></script>
1113+
<script
1114+
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/prism.min.js"
1115+
integrity="sha384-06z5D//U/xpvxZHuUz92xBvq3DqBBFi7Up53HRrbV7Jlv7Yvh/MZ7oenfUe9iCEt"
1116+
crossorigin="anonymous"
1117+
></script>
1118+
<script
1119+
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/line-numbers/prism-line-numbers.min.js"
1120+
integrity="sha384-6QJu8apxMmB9TiPVWzYKF5pRgKcz7snO0/QU+MrWmgBLECQjoa6erxX2VQ5t41Jd"
1121+
crossorigin="anonymous"
1122+
></script>
1123+
<script
1124+
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/toolbar/prism-toolbar.min.js"
1125+
integrity="sha384-jC1G68eGEXJpPwMDNqyIUQsQlcUCdCU+a7GGuoV4TUZvM1gLYTMJUDvqBnxtZLWA"
1126+
crossorigin="anonymous"
1127+
></script>
1128+
<script
1129+
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/copy-to-clipboard/prism-copy-to-clipboard.min.js"
1130+
integrity="sha384-ZdEfx8sYX8i4IVXU1tUbqwOp4PBUCCmnpagpiHchnstXkEczkzPfUd9fvBrntM+F"
1131+
crossorigin="anonymous"
1132+
></script>
1133+
<script
1134+
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-typescript.min.js"
1135+
integrity="sha384-PeOqKNW/piETaCg8rqKFy+Pm6KEk7e36/5YZE5XO/OaFdO+/Aw3O8qZ9qDPKVUgx"
1136+
crossorigin="anonymous"
1137+
></script>
1138+
<script
1139+
src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-javascript.min.js"
1140+
integrity="sha384-D44bgYYKvaiDh4cOGlj1dbSDpSctn2FSUj118HZGmZEShZcO2v//Q5vvhNy206pp"
1141+
crossorigin="anonymous"
1142+
></script>
11041143

11051144
<!-- React Component -->
11061145
<script type="text/babel">
@@ -1397,7 +1436,7 @@ <h4 class="font-bold text-orange-900 mb-2">💡 最適化の考察</h4>
13971436
</text>
13981437

13991438
<path
1400-
d="M 330 90 L 360 90"
1439+
d="M 330 90 L 370 90"
14011440
stroke="#10b981"
14021441
strokeWidth="3"
14031442
fill="none"
@@ -1513,7 +1552,7 @@ <h4 class="font-bold text-orange-900 mb-2">💡 最適化の考察</h4>
15131552
</text>
15141553

15151554
<path
1516-
d="M 330 95 L 360 95"
1555+
d="M 330 95 L 370 95"
15171556
stroke="#a855f7"
15181557
strokeWidth="3"
15191558
fill="none"
@@ -1621,7 +1660,7 @@ <h4 class="font-bold text-orange-900 mb-2">💡 最適化の考察</h4>
16211660
</text>
16221661

16231662
<path
1624-
d="M 330 90 L 360 90"
1663+
d="M 330 90 L 370 90"
16251664
stroke="#10b981"
16261665
strokeWidth="3"
16271666
fill="none"
@@ -1737,7 +1776,7 @@ <h4 class="font-bold text-orange-900 mb-2">💡 最適化の考察</h4>
17371776
</text>
17381777

17391778
<path
1740-
d="M 330 95 L 360 95"
1779+
d="M 330 95 L 370 95"
17411780
stroke="#c026d3"
17421781
strokeWidth="3"
17431782
fill="none"
@@ -1878,7 +1917,7 @@ <h4 class="font-bold text-orange-900 mb-2">💡 最適化の考察</h4>
18781917
return () => {
18791918
if (timerRef.current) clearTimeout(timerRef.current);
18801919
};
1881-
}, [isPlaying, activeStep]);
1920+
}, [isPlaying, activeStep, stepsData.length]);
18821921

18831922
const handlePlay = () => {
18841923
if (isPlaying) return;

0 commit comments

Comments
 (0)