Menu
CoddyTech

Swim in Rising Water

0 から n²-1 までのすべての数がちょうど1回ずつ含まれる、高さを表す n × n のグリッドが与えられます。時刻 t には水位がどこでも高さ t になり、高さが t 以下のすべてのセルが水没します。左上のセルから開始します。自分のセルと隣り合う辺を共有し、両方が水没しているセルへは、時間をかけずに泳いで移動できます。右下のセルに到達できる最も早い時刻を返してください。

関数

swimInWater(grid: integer-2d-array) → integer
gridinteger-2d-array
高さを、n個の数値からなる行がn行並んだリストとして
戻り値integer
右下のセルに到達できる最も早い時刻

制約

  • n == grid.length == grid[i].length
  • 1 ≤ n ≤ 100
  • 0 ≤ grid[i][j] ≤ n²-1
  • 0からn²-1までのすべての値が、それぞれちょうど1回ずつ現れます。

例

入力
grid = [[0, 2], [3, 1]]
出力
2
説明
右上のセルを通る経路は0、2、1で、最も高いセルは2です。左下を通る経路は0、3、1で、最も高いセルは3です。時刻2では、最初の経路は水没しています。
challenge icon

発展問題

高さが重複し、10^9に達する可能性がある場合、どの方法なら変更せずにそのまま使えますか。また、何を対象に二分探索しますか?

コードをリセット
def swimInWater(grid):
    # ここにコードを書いてください

テスト #1

テスト #2

テスト #3

引数

grid = [[0, 2], [3, 1]]

期待される出力

2