プロトタイプ拡張による O(1) 実装
すべての配列に対して
.last()
メソッドを呼び出せるように拡張し、配列の最後の要素を返します。配列が空の場合は
-1 を返します。
入力: nums = [null, {}, 3]
出力: 3
入力: nums = []
出力: -1
arr
は有効なJSON配列
0 <= arr.length <= 1000
T | -1
として表現
declare global {
interface Array<T> {
last(): T | -1;
}
}
Array.prototype.last = function<T>(this: T[]): T | -1 {
return this.length ? this[this.length - 1] : -1;
};
export {};
フローの説明:
1. メソッド呼び出し時、配列の
length
プロパティをチェック
2. length が 0(falsy)なら
-1 を返す
3. length が正(truthy)なら
length - 1
のインデックスで要素にアクセス
4. アクセスした要素を返す(型 T)
| 項目 | 本実装 | 説明 |
|---|---|---|
| 時間計算量 | O(1) | length プロパティアクセスとインデックスアクセスのみ |
| 空間計算量 | O(1) | 追加メモリ不要、一時変数なし |
| 副作用 | なし | 完全に Pure、元の配列は不変 |
this.length === 0
よりも
this.length
の方が微小に高速
this[index] は
V8 で最も最適化されたパス