File tree Expand file tree Collapse file tree
Algorithm/TwoPointers/leetcode/26. Remove Duplicates from Sorted Array/Sonnet 5 Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1212
1313- ** 制約分析** : LeetCodeの制約は` 1 <= nums.length <= 3 * 10^4 ` 程度であり、O(n)アルゴリズムであれば余裕を持って制限時間内に収まります。O(n log n)以上の計算量は不要です。
1414- ** 最速手法** : ソート済みという性質を使ったTwo-Pointer(二重ポインタ)法がBig-O最適(O(n))です。CPythonではPure Pythonのforループはインタープリタのオーバーヘッドが大きいため、組み込み関数で置き換えられる部分がないか検討しますが、この問題は「前の要素の処理結果に依存する逐次処理」であり、` sum() ` や` map() ` のような組み込み関数に単純に置き換えることはできません。
15- - ** メモリ最小化** : 新しいリストや` set ` を一切生成せず、` int ` 型の変数1個だけで完結させるインプレース操作 (=新しいオブジェクトを作らず、既存のオブジェクトを直接書き換える操作。メモリ効率が良い)を採用します。
15+ - ** メモリ最小化** : 新しいリストや` set ` を一切生成せず、` int ` 型の変数2個( ` slow ` と ` fast ` )だけで完結させるインプレース操作 (=新しいオブジェクトを作らず、既存のオブジェクトを直接書き換える操作。メモリ効率が良い)を採用します。
1616- ** CPython最適化** : 組み込みの` len() ` のみを使用します。` enumerate() ` は「現在の要素の値」しか提供せず、今回は「1つ前に確定した位置」も同時に参照する必要があるため、素直な` range() ` ベースのループのほうが適しています。
1717
1818### 業務開発視点
1919
2020- ** 型安全設計** : 引数` nums: List[int] ` 、戻り値` -> int ` という型ヒント(=関数の引数や戻り値に型を注釈として書く仕組み)をそのまま活かし、pylance(=VSCodeで使えるPythonの静的型チェックツール。実行前にバグを検出できる)が型の不整合を実行前に検出できるようにします。
21- - ** エラーハンドリング** : 想定される例外として、①` nums ` が` None ` または ` list ` 以外の型で渡されるケース( ` TypeError ` ) 、②` nums ` が空リストのケース(この問題の文脈では正当な入力として` 0 ` を返す)を考慮します。Pythonは動的型付け言語(=変数の型が実行時まで確定しない言語)のため、呼び出し元が誤った型を渡しても実行時までエラーに気づけません。型ヒント + pylanceによる静的チェックと、実行時の` isinstance ` チェックを組み合わせることで、コンパイル言語(Java/C++など)に近い安全性を実現します。
21+ - ** エラーハンドリング** : 想定される例外として、①` nums ` が` None ` の場合に ` ValueError ` 、 ` list ` 以外の型で渡される場合に ` TypeError ` を投げるケース 、②` nums ` が空リストのケース(この問題の文脈では正当な入力として` 0 ` を返す)を考慮します。Pythonは動的型付け言語(=変数の型が実行時まで確定しない言語)のため、呼び出し元が誤った型を渡しても実行時までエラーに気づけません。型ヒント + pylanceによる静的チェックと、実行時の` isinstance ` チェックを組み合わせることで、コンパイル言語(Java/C++など)に近い安全性を実現します。
2222- ** 可読性** : docstring(=関数やクラスの先頭に書く説明文。` """三重クォート""" ` で囲む)・行コメント・意味の明確な変数名(` slowPointer ` ではなく` slow ` のような簡潔だが文脈で意味が通る名前)を徹底します。
2323
2424### Python特有分析
You can’t perform that action at this time.
0 commit comments