From 5fea72229543c7c6df6156d4312938f9be3ffafc Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 9 Jun 2024 11:44:45 +0800 Subject: [PATCH] Add solution and test-cases for problem 778 --- .../0778.Swim-in-Rising-Water/README.md | 36 +++++++++------ .../0778.Swim-in-Rising-Water/Solution.go | 43 +++++++++++++++++- .../Solution_test.go | 21 ++++++--- .../0778.Swim-in-Rising-Water/swim1-grid.jpeg | Bin 0 -> 3363 bytes .../swim2-grid-1.jpeg | Bin 0 -> 22389 bytes 5 files changed, 77 insertions(+), 23 deletions(-) create mode 100644 leetcode/701-800/0778.Swim-in-Rising-Water/swim1-grid.jpeg create mode 100644 leetcode/701-800/0778.Swim-in-Rising-Water/swim2-grid-1.jpeg diff --git a/leetcode/701-800/0778.Swim-in-Rising-Water/README.md b/leetcode/701-800/0778.Swim-in-Rising-Water/README.md index e39c46e06..c1e644e74 100644 --- a/leetcode/701-800/0778.Swim-in-Rising-Water/README.md +++ b/leetcode/701-800/0778.Swim-in-Rising-Water/README.md @@ -1,28 +1,36 @@ # [778.Swim in Rising Water][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given an `n x n` integer matrix `grid` where each value `grid[i][j]` represents the elevation at that point `(i, j)`. + +The rain starts to fall. At time `t`, the depth of the water everywhere is `t`. You can swim from a square to another 4-directionally adjacent square if and only if the elevation of both squares individually are at most `t`. You can swim infinite distances in zero time. Of course, you must stay within the boundaries of the grid during your swim. + +Return the least time until you can reach the bottom right square `(n - 1, n - 1)` if you start at the top left square `(0, 0)`. -**Example 1:** +**Example 1:** + +![1](./swim1-grid.jpeg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: grid = [[0,2],[1,3]] +Output: 3 +Explanation: +At time 0, you are in grid location (0, 0). +You cannot go anywhere else because 4-directionally adjacent neighbors have a higher elevation than t = 0. +You cannot reach point (1, 1) until time 3. +When the depth of water is 3, we can swim anywhere inside the grid. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./swim2-grid-1.jpeg) -### 思路1 -> ... -Swim in Rising Water -```go ``` - +Input: grid = [[0,1,2,3,4],[24,23,22,21,5],[12,13,14,15,16],[11,17,18,19,20],[10,9,8,7,6]] +Output: 16 +Explanation: The final route is shown. +We need to wait until time 16 so that (0, 0) and (4, 4) are connected. +``` ## 结语 diff --git a/leetcode/701-800/0778.Swim-in-Rising-Water/Solution.go b/leetcode/701-800/0778.Swim-in-Rising-Water/Solution.go index d115ccf5e..7cc68e6ec 100644 --- a/leetcode/701-800/0778.Swim-in-Rising-Water/Solution.go +++ b/leetcode/701-800/0778.Swim-in-Rising-Water/Solution.go @@ -1,5 +1,44 @@ package Solution -func Solution(x bool) bool { - return x +func dfs778(grid [][]int, visited [][]bool, x, y, t int) bool { + if x < 0 || x >= len(grid) || y < 0 || y >= len(grid) || visited[x][y] || grid[x][y] > t { + return false + } + if x == len(grid)-1 && y == len(grid)-1 { + return true + } + visited[x][y] = true + return dfs778(grid, visited, x-1, y, t) || + dfs778(grid, visited, x+1, y, t) || + dfs778(grid, visited, x, y-1, t) || + dfs778(grid, visited, x, y+1, t) + +} +func do778(grid [][]int, x, y, t int) bool { + gridCopy := make([][]int, len(grid)) + v := make([][]bool, len(grid)) + for i := 0; i < len(grid); i++ { + gridCopy[i] = make([]int, len(grid)) + v[i] = make([]bool, len(grid)) + copy(gridCopy[i], grid[i]) + } + + return dfs778(gridCopy, v, x, y, t) +} +func Solution(grid [][]int) int { + + // 一般这种dfs或者bfs都不太好确定的题,可以尝试binary search+dfs + // 直接尝试搜索每个答案 + ans := -1 + l, r := 0, 1<<31-1 + for l <= r { + mid := l + (r-l)/2 + if do778(grid, 0, 0, mid) { + ans = mid + r = mid - 1 + } else { + l = mid + 1 + } + } + return ans } diff --git a/leetcode/701-800/0778.Swim-in-Rising-Water/Solution_test.go b/leetcode/701-800/0778.Swim-in-Rising-Water/Solution_test.go index 14ff50eb4..dd43699ef 100644 --- a/leetcode/701-800/0778.Swim-in-Rising-Water/Solution_test.go +++ b/leetcode/701-800/0778.Swim-in-Rising-Water/Solution_test.go @@ -10,12 +10,19 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs [][]int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{ + {0, 2}, {1, 3}, + }, 3}, + {"TestCase1", [][]int{ + {0, 1, 2, 3, 4}, + {24, 23, 22, 21, 5}, + {12, 13, 14, 15, 16}, + {11, 17, 18, 19, 20}, + {10, 9, 8, 7, 6}, + }, 16}, } // 开始测试 @@ -30,10 +37,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/701-800/0778.Swim-in-Rising-Water/swim1-grid.jpeg b/leetcode/701-800/0778.Swim-in-Rising-Water/swim1-grid.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..062429fc05ad374fac07c374670e3072e4083726 GIT binary patch literal 3363 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 ?ms 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