From 70f66e2df7ae5e8ce17703c5f933decbca8d98fc Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 28 Nov 2024 09:39:00 +0800 Subject: [PATCH] Add solution and test-cases for problem 2290 --- .../1.png | Bin 0 -> 13455 bytes .../2.png | Bin 0 -> 9003 bytes .../README.md | 36 ++++++----- .../Solution.go | 58 +++++++++++++++++- .../Solution_test.go | 13 ++-- 5 files changed, 85 insertions(+), 22 deletions(-) create mode 100644 leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/1.png create mode 100644 leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/2.png diff --git a/leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/1.png b/leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/1.png new file mode 100644 index 0000000000000000000000000000000000000000..6cc8d658ffafab9c6109cf362933e7cb87bbd0b3 GIT binary patch literal 13455 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 CFFtVq literal 0 HcmV?d00001 diff --git a/leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/2.png b/leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/2.png new file mode 100644 index 0000000000000000000000000000000000000000..05adcfbc9991baaa4efc505d625829984a8ad3d5 GIT binary patch literal 9003 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 literal 0 HcmV?d00001 diff --git a/leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/README.md b/leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/README.md index 5729751da..9d1ae015a 100755 --- a/leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/README.md +++ b/leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/README.md @@ -1,28 +1,36 @@ # [2290.Minimum Obstacle Removal to Reach Corner][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 a **0-indexed** 2D integer array `grid` of size `m x n`. Each cell has one of two values: + +- `0` represents an **empty** cell, +- `1` represents an **obstacle** that may be removed. + +You can move up, down, left, or right from and to an empty cell. + +Return the **minimum** number of **obstacles** to **remove** so you can move from the upper left corner `(0, 0)` to the lower right corner `(m - 1, n - 1)`. -**Example 1:** +**Example 1:** + +![1](./1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: grid = [[0,1,1],[1,1,0],[1,1,0]] +Output: 2 +Explanation: We can remove the obstacles at (0, 1) and (0, 2) to create a path from (0, 0) to (2, 2). +It can be shown that we need to remove at least 2 obstacles, so we return 2. +Note that there may be other ways to remove 2 obstacles to create a path. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./2.png) -### 思路1 -> ... -Minimum Obstacle Removal to Reach Corner -```go ``` - +Input: grid = [[0,1,0,0,0],[0,1,0,1,0],[0,0,0,1,0]] +Output: 0 +Explanation: We can move from (0, 0) to (2, 4) without removing any obstacles, so we return 0. +``` ## 结语 diff --git a/leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/Solution.go b/leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/Solution.go index d115ccf5e..4eaad3b18 100644 --- a/leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/Solution.go +++ b/leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/Solution.go @@ -1,5 +1,61 @@ package Solution -func Solution(x bool) bool { +import "container/heap" + +type heap2290 [][3]int + +func (h *heap2290) Len() int { + return len(*h) +} + +func (h *heap2290) Swap(i, j int) { + (*h)[i], (*h)[j] = (*h)[j], (*h)[i] +} + +func (h *heap2290) Less(i, j int) bool { + return (*h)[i][2] < (*h)[j][2] +} + +func (h *heap2290) Push(x any) { + *h = append(*h, x.([3]int)) +} + +func (h *heap2290) Pop() any { + old := *h + l := len(old) + x := old[l-1] + *h = old[:l-1] return x } + +var dirs2290 = [][2]int{ + {0, 1}, {1, 0}, {-1, 0}, {0, -1}, +} + +func Solution(grid [][]int) int { + m, n := len(grid), len(grid[0]) + h := heap2290{{0, 0, 0}} + v := map[[2]int]int{ + [2]int{0, 0}: 0, + } + for h.Len() > 0 { + cur := heap.Pop(&h).([3]int) + if cur[0] == m-1 && cur[1] == n-1 { + return cur[2] + } + for _, dir := range dirs2290 { + nx, ny := cur[0]+dir[0], cur[1]+dir[1] + if !(nx >= 0 && nx < m && ny >= 0 && ny < n) { + continue + } + need := cur[2] + grid[nx][ny] + key := [2]int{nx, ny} + //key = [3]int{nx, ny, need} + if vv, ok := v[key]; !ok || vv > need { + heap.Push(&h, [3]int{nx, ny, need}) + v[key] = need + } + } + } + return -1 +} diff --git a/leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/Solution_test.go b/leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/Solution_test.go index 14ff50eb4..df3e42840 100644 --- a/leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/Solution_test.go +++ b/leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/Solution_test.go @@ -10,12 +10,11 @@ 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, 1, 1}, {1, 1, 0}, {1, 1, 0}}, 2}, + {"TestCase2", [][]int{{0, 1, 0, 0, 0}, {0, 1, 0, 1, 0}, {0, 0, 0, 1, 0}}, 0}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { }