From 4c2a99ea9a61846b2dfc1fb12ff6f1e319b2ca79 Mon Sep 17 00:00:00 2001 From: myoshizumi Date: Fri, 27 Feb 2026 14:13:44 +0900 Subject: [PATCH 1/9] fix: regenerate index.html to ensure auto-generated timestamp --- public/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/index.html b/public/index.html index be321a3a..e56eb2ac 100644 --- a/public/index.html +++ b/public/index.html @@ -795,7 +795,7 @@

🧪 - Generated on 2026-02-27 05:04:42 UTC + Generated on 2026-02-27 05:13:44 UTC
+ + + + + + + + + + + + + + + + + + + + + + + +
+

+ アルゎリズム抂芁 +

+ +
+
+
O(n)
+
時間蚈算量
+
+
+
O(n)
+
空間蚈算量
+
+
+
0 〜 10⁵
+
配列サむズ
+
+
+
string
+
fnの戻り倀型
+
+
+ +
+
+

問題の芁玄

+

+ Array.prototype + に + groupBy(fn) + メ゜ッドを远加する。 コヌルバック + fn(item) → string + を各芁玠に適甚し、 同じキヌを返した芁玠を同じ配列にたずめた + Record<string, T[]> + を返す。 +

+
+

+ 入出力䟋 +

+
+[{id:"1"},{id:"1"},{id:"2"}]
+  .groupBy(item => item.id)
+
+→ {
+    "1": [{id:"1"}, {id:"1"}],
+    "2": [{id:"2"}]
+  }
+
+
+ +
+

最適化のポむント

+
    +
  • + ✓ + reduce → for ルヌプスタックフレヌムを n 回生成しない +
  • +
  • + ✓ + length キャッシュ毎ルヌプの this.length 参照を排陀 +
  • +
  • + ✓ + in 挔算子??= + より軜量なキヌ存圚確認 +
  • +
  • + ✓ + Object.create(null)プロトタむプ汚染を防ぐ玔粋ハッシュマップ +
  • +
+
+
+
+ + +
+

+ ステップバむステップ解説 +

+
+
+ + +
+

+ 最適化 Before / After 比范 +

+
+
+ + +
+

+ TypeScript 実装最適化版 +

+
// Declaration Merging: Array<T> に groupBy を远加
+interface Array<T> {
+    groupBy(fn: (item: T) => string): Record<string, T[]>;
+}
+
+Array.prototype.groupBy = function<T>(
+    this: T[],
+    fn: (item: T) => string
+): Record<string, T[]> {
+    // ① Object.create(null) でプロトタむプ汚染を防ぐ玔粋ハッシュマップを生成
+    const result: Record<string, T[]> = Object.create(null);
+
+    // ② length をキャッシュしおプロパティ参照コストを削枛
+    const len = this.length;
+
+    for (let i = 0; i < len; i++) {
+        const item = this[i];   // ③ this 参照を1回に抑制
+        const key = fn(item);   // コヌルバックでキヌを生成
+
+        // ④ in 挔算子: ??= より軜量型倉換コストなし
+        if (key in result) {
+            result[key].push(item);  // キヌ存圚: 既存配列ぞ远加
+        } else {
+            result[key] = [item];    // キヌ䞍圚: 新芏配列を生成
+        }
+    }
+
+    return result;
+};
+
+/**
+ * 䜿甚䟋
+ * [1,2,3].groupBy(String)
+ * // => {"1":[1], "2":[2], "3":[3]}
+ *
+ * [6,7,1,2].groupBy(n => String(n > 5))
+ * // => {"true":[6,7], "false":[1,2]}
+ */
+
+ + +
+

+ 凊理フロヌチャヌト +

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + groupBy(fn) 開始 + + + + + + + + + 初期化 + + + + result=Object.create(null) / i=0 / len=this.length + + + + + + + + + i < len ? + + + + + + + + No (ルヌプ終了) + + + + + + Yes + + + + + + 芁玠ずキヌを取埗 + + + + item = this[i] / key = fn(item) + + + + + + + + + key in result ? + + + + + + + + + Yes + + + + + + + + + No + + + + + + result[key] = [item] + + + + + + result[key].push(item) + + + + + + + + + + + + i++ + + + + + + + + + + + ルヌプバック + + + + + + result を返华 + + + Record<string, T[]> + + + + + + + + + 終了 + + +
+

+ フロヌの説明
+ 1. + Object.create(null) + でプロトタむプなしの玔粋ハッシュマップを初期化し、len + をキャッシュ
+ 2. + i < len + の間ルヌプスタックフレヌムは1぀。No → 右バむパス(èµ€)で返华ぞスキップ
+ 3. + fn(item) でキヌを生成し + in + 挔算子で存圚確認。Yes → push / + No → 新芏配列
+ 4. 䞡分岐が合流し + i++ 埌に玫矢印でルヌプ先頭ぞ戻る
+ 5. 党芁玠凊理埌に + result を返华しお終了 +

+
+ + +
+

+ 蚈算量分析 +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ 芳点 + 蚈算量 + 詳现 +
時間蚈算量 + O(n) + + 党芁玠を1回走査。fn が O(1) であるこずが前提 +
空間蚈算量 + O(n) + + 党芁玠ぞの参照を result に栌玍理論的䞋限 +
ハッシュマップ参照 + O(1) amortized + + V8 ゚ンゞンのハッシュテヌブル実装による +
push 操䜜 + O(1) amortized + + 配列の動的拡匵倍増アルゎリズムによる +
+
+ +
+
+

reduce

+

+ n 回のコヌルバック生成
スタックフレヌム × n +

+

Memory Beats ~40%

+
+
+
+ 掚奚 +
+

for ルヌプ

+

+ スタックフレヌム 1 ぀
length キャッシュ有効 +

+

Memory Beats ~70%+

+
+
+

for...of

+

+ Iterator プロトコル経由
Symbol.iterator オヌバヌヘッド +

+

䞭間的なパフォヌマンス

+
+
+
+ + + + + +
+ LeetCode 2631 – Group By  TypeScript 解説ペヌゞ  Node.js v22.14.0 ESM +
+ + diff --git a/public/JavaScript/2631. Group By/Claude Code Sonnet 4.6 extended/README_react.html b/public/JavaScript/2631. Group By/Claude Code Sonnet 4.6 extended/README_react.html new file mode 100644 index 00000000..8cfae153 --- /dev/null +++ b/public/JavaScript/2631. Group By/Claude Code Sonnet 4.6 extended/README_react.html @@ -0,0 +1,1731 @@ + + + + + + LeetCode 2631 – Group By | Prototype Extension + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ アルゎリズム抂芁 +

+ +
+
+
O(n)
+
時間蚈算量
+
+
+
O(n)
+
空間蚈算量
+
+
+
0 〜 10⁵
+
配列サむズ
+
+
+
string
+
fnの戻り倀型
+
+
+ +
+
+

問題の芁玄

+

+ Array.prototype + に + groupBy(fn) + メ゜ッドを远加する。 コヌルバック + fn(item) → string + を各芁玠に適甚し、 同じキヌを返した芁玠を同じ配列にたずめた + Record<string, T[]> + を返す。 +

+
+

+ 入出力䟋 +

+
+[{id:"1"},{id:"1"},{id:"2"}]
+  .groupBy(item => item.id)
+
+→ {
+    "1": [{id:"1"}, {id:"1"}],
+    "2": [{id:"2"}]
+  }
+
+
+ +
+

最適化のポむント

+
    +
  • + ✓ + reduce → for ルヌプスタックフレヌムを n 回生成しない +
  • +
  • + ✓ + length キャッシュ毎ルヌプの this.length 参照を排陀 +
  • +
  • + ✓ + in 挔算子??= + より軜量なキヌ存圚確認 +
  • +
  • + ✓ + Object.create(null)プロトタむプ汚染を防ぐ玔粋ハッシュマップ +
  • +
+
+
+
+ + +
+

+ ステップバむステップ解説 +

+
+
+ + +
+

+ 最適化 Before / After 比范 +

+
+
+ + +
+

+ TypeScript 実装最適化版 +

+
// Declaration Merging: Array<T> に groupBy を远加
+interface Array<T> {
+    groupBy(fn: (item: T) => string): Record<string, T[]>;
+}
+
+Array.prototype.groupBy = function<T>(
+    this: T[],
+    fn: (item: T) => string
+): Record<string, T[]> {
+    // ① Object.create(null) でプロトタむプ汚染を防ぐ玔粋ハッシュマップを生成
+    const result: Record<string, T[]> = Object.create(null);
+
+    // ② length をキャッシュしおプロパティ参照コストを削枛
+    const len = this.length;
+
+    for (let i = 0; i < len; i++) {
+        const item = this[i];   // ③ this 参照を1回に抑制
+        const key = fn(item);   // コヌルバックでキヌを生成
+
+        // ④ in 挔算子: ??= より軜量型倉換コストなし
+        if (key in result) {
+            result[key].push(item);  // キヌ存圚: 既存配列ぞ远加
+        } else {
+            result[key] = [item];    // キヌ䞍圚: 新芏配列を生成
+        }
+    }
+
+    return result;
+};
+
+/**
+ * 䜿甚䟋
+ * [1,2,3].groupBy(String)
+ * // => {"1":[1], "2":[2], "3":[3]}
+ *
+ * [6,7,1,2].groupBy(n => String(n > 5))
+ * // => {"true":[6,7], "false":[1,2]}
+ */
+
+ + +
+

+ 凊理フロヌチャヌト +

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + groupBy(fn) 開始 + + + + + + + + + 初期化 + + + + result=Object.create(null) / i=0 / len=this.length + + + + + + + + + i < len ? + + + + + + + + No (ルヌプ終了) + + + + + + Yes + + + + + + 芁玠ずキヌを取埗 + + + + item = this[i] / key = fn(item) + + + + + + + + + key in result ? + + + + + + + + + Yes + + + + + + + + + No + + + + + + result[key] = [item] + + + + + + result[key].push(item) + + + + + + + + + + + + i++ + + + + + + + + + + + ルヌプバック + + + + + + result を返华 + + + Record<string, T[]> + + + + + + + + + 終了 + + +
+

+ フロヌの説明
+ 1. + Object.create(null) + でプロトタむプなしの玔粋ハッシュマップを初期化し、len + をキャッシュ
+ 2. + i < len + の間ルヌプスタックフレヌムは1぀。No → 右バむパス(èµ€)で返华ぞスキップ
+ 3. + fn(item) でキヌを生成し + in + 挔算子で存圚確認。Yes → push / + No → 新芏配列
+ 4. 䞡分岐が合流し + i++ 埌に玫矢印でルヌプ先頭ぞ戻る
+ 5. 党芁玠凊理埌に + result を返华しお終了 +

+
+ + +
+

+ 蚈算量分析 +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ 芳点 + 蚈算量 + 詳现 +
時間蚈算量 + O(n) + + 党芁玠を1回走査。fn が O(1) であるこずが前提 +
空間蚈算量 + O(n) + + 党芁玠ぞの参照を result に栌玍理論的䞋限 +
ハッシュマップ参照 + O(1) amortized + + V8 ゚ンゞンのハッシュテヌブル実装による +
push 操䜜 + O(1) amortized + + 配列の動的拡匵倍増アルゎリズムによる +
+
+ +
+
+

reduce

+

+ n 回のコヌルバック生成
スタックフレヌム × n +

+

Memory Beats ~40%

+
+
+
+ 掚奚 +
+

for ルヌプ

+

+ スタックフレヌム 1 ぀
length キャッシュ有効 +

+

Memory Beats ~70%+

+
+
+

for...of

+

+ Iterator プロトコル経由
Symbol.iterator オヌバヌヘッド +

+

䞭間的なパフォヌマンス

+
+
+
+ + + + + +
+ LeetCode 2631 – Group By  TypeScript 解説ペヌゞ  Node.js v22.14.0 ESM +
+ + diff --git a/public/index.html b/public/index.html index e56eb2ac..8863ea44 100644 --- a/public/index.html +++ b/public/index.html @@ -416,7 +416,7 @@

🧪 Algorithm Study Index

-

156 interactive lessons across 6 domains

+

157 interactive lessons across 6 domains

@@ -431,12 +431,12 @@

- + @@ -577,6 +577,7 @@

  • 📜LeetCode 2625 - Flatten Deeply Nested Array | 再垰的配列平坊化JavaScript/2625. Flatten Deeply Nested Array/Claude Code Sonnet 4.5 extended/README_react.html
  • 📜LeetCode 2629 - Function CompositionJavaScript/2629. Function Composition/Claude Code Sonnet 4.6 extended/README_react.html
  • 📜LeetCode 2630 - Memoize II | ネストMap トラむ構造JavaScript/2630. Memoize II/Claude Code Sonnet 4.6 extended/README_react.html
  • +
  • 📜LeetCode 2631 – Group By | Prototype ExtensionJavaScript/2631. Group By/Claude Code Sonnet 4.6 extended/README_react.html
  • 📜LeetCode: Snail Traversal - 蛇行パタヌンで1D→2D配列倉換JavaScript/2624. Snail Traversal/Claude Code Sonnet 4.5/README_react.html
  • 📜Sleep - 非同期スリヌプ関数の実装JavaScript/2621. Sleep/Claude Code Sonnet 4.5/README_react.html
  • 📜Time Limited Cache - 有効期限付きキャッシュ | LeetCode解説JavaScript/2622. Cache With Time Limit/Claude Code Sonnet 4.5/README_react.html
  • @@ -755,6 +756,7 @@

  • 📜LeetCode 2625 - Flatten Deeply Nested Array | 再垰的配列平坊化JavaScript/2625. Flatten Deeply Nested Array/Claude Code Sonnet 4.5 extended/README_react.html
  • 📜LeetCode 2629 - Function CompositionJavaScript/2629. Function Composition/Claude Code Sonnet 4.6 extended/README_react.html
  • 📜LeetCode 2630 - Memoize II | ネストMap トラむ構造JavaScript/2630. Memoize II/Claude Code Sonnet 4.6 extended/README_react.html
  • +
  • 📜LeetCode 2631 – Group By | Prototype ExtensionJavaScript/2631. Group By/Claude Code Sonnet 4.6 extended/README_react.html
  • 📜LeetCode: Snail Traversal - 蛇行パタヌンで1D→2D配列倉換JavaScript/2624. Snail Traversal/Claude Code Sonnet 4.5/README_react.html
  • 📜Sleep - 非同期スリヌプ関数の実装JavaScript/2621. Sleep/Claude Code Sonnet 4.5/README_react.html
  • 📜Time Limited Cache - 有効期限付きキャッシュ | LeetCode解説JavaScript/2622. Cache With Time Limit/Claude Code Sonnet 4.5/README_react.html
  • @@ -795,7 +797,7 @@

    🧪 - Generated on 2026-02-27 05:13:44 UTC + Generated on 2026-02-28 05:34:36 UTC