🌧️ 雨水トラップアルゴリズム解析

📊 アルゴリズムの可視化

左ポインタ
0
右ポインタ
11
累積水量
0

📈 ステップバイステップ解析

Ï

🧮 アルゴリズムの詳細

Two Pointer Approach の原理

核心概念: 各位置で水がトラップできる量は、その位置の左側と右側の最大高度の最小値から現在の高度を引いた値です。

🔍 処理の流れ

  1. 初期化: 左右のポインタを配列の両端に設置
  2. 比較: 左右の高度を比較し、低い方を処理対象とする
  3. 更新: 最大高度を更新するか、水量を計算して加算
  4. 移動: 処理したポインタを中央に向かって移動
  5. 終了: 左右のポインタが交差するまで繰り返し

💡 なぜこの方法が正しいのか?

低い方の最大高度を基準にすることで、確実に水がトラップできる量を計算できます。高い方の側には必ずそれ以上の高度があることが保証されているため、低い方の制約が決定的になります。

⚡ 計算量解析

時間計算量
O(n)
配列を一度だけ走査
空間計算量
O(1)
定数個の変数のみ

🎯 最適化のポイント

  • 単一パス: 配列を一度だけ走査することで最小の時間計算量を実現
  • 定数空間: 追加の配列を使わず、数個の変数のみで解決
  • 早期終了: 無駄な計算を避け、効率的な処理
  • キャッシュ効率: 線形アクセスパターンでCPUキャッシュを活用