From 0337aae57c2c07b994d699ff0b10ed05c954cab2 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 18 Jan 2025 17:31:49 +0800 Subject: [PATCH] Add solution and test-cases for problem 1368 --- .../1.png | Bin 0 -> 15702 bytes .../2.png | Bin 0 -> 4280 bytes .../3.png | Bin 0 -> 2502 bytes .../README.md | 55 +++++++++++++ .../Solution.go | 75 +++++++++++++++++- .../Solution_test.go | 14 ++-- 6 files changed, 136 insertions(+), 8 deletions(-) create mode 100644 leetcode/1301-1400/1368.Minimum-Cost-to-Make-at-Least-One-Valid-Path-in-a-Grid/1.png create mode 100644 leetcode/1301-1400/1368.Minimum-Cost-to-Make-at-Least-One-Valid-Path-in-a-Grid/2.png create mode 100644 leetcode/1301-1400/1368.Minimum-Cost-to-Make-at-Least-One-Valid-Path-in-a-Grid/3.png create mode 100644 leetcode/1301-1400/1368.Minimum-Cost-to-Make-at-Least-One-Valid-Path-in-a-Grid/README.md diff --git a/leetcode/1301-1400/1368.Minimum-Cost-to-Make-at-Least-One-Valid-Path-in-a-Grid/1.png b/leetcode/1301-1400/1368.Minimum-Cost-to-Make-at-Least-One-Valid-Path-in-a-Grid/1.png new file mode 100644 index 0000000000000000000000000000000000000000..9b0e2ecf2267b8dd4a264bbc520ce517b29b567c GIT binary patch literal 15702 zcmeI3d011|w!pDeQGsBk3aG%Nw$j!z2m&fo3std|qE#H25fL>^0cA3n>j0@1g;pg9 z6>8K`Hy;5&;~% z9q^g+XG%)BiK-L6GvRnnsMF4HB_$FY{hLu8a&@#yQxw5_hL7k;rfa&(hH0U8+GghasYaIUn<&%y0X&@Ytl4T{tDNpAw_m6FkZNk{Eqzr}Dy z^^15I!06maF{yU8AojsKR)?d-{22EF+`7@aNn;p zDoSdpUNR73Z?0!)j7F1JVIB-$+((J~_EVc_LjB zHL_-y4zD(jyt>OH;+oE60Ck&_p|N-0qkF7g_o27!+m8K4NXD7y*!!x~3*(N25Y=s* zK8u`z1$}CQIiT*|I+g2-N7wtaK36yeyf{==zUq}qY@K_=+~>h0#dF8`9dHL_VTZa9#|?ytVm zvxRsnHI_0GGJ4g&!XihcQ{*^yQkT1i^@@460=3&+mG!-ZxWF(|lhI*X zr_A__%W7EMJWsZ;jyh9D$l|hBADQIs@rKcS%cfOU8+T+!7jN&KjYY((7$3`y&aG|G z#aeXbatg>^{f>DuTfgnIWr_H-eMId2p5k5W2@!YbCXPAL_eu*F)@|?ohW$jpD50q9 z6;i5#zbaus=-+K&Qs}eAiG0J^;w!UERm)1A$q1W!h1J>Wp$aBK8R^fjG#fiQyrf_r zmJqIAqE_7Xfp_jwJdU!3oNm>Yp#|3RZ~GC6R+PU(e<)p93+%&tiMS)^7OQNzmqn&Q zY~|@yHk5DuMKk+XQ&uAZ!tPVaT2Yn1e&s<@oXe*zdt=LfjbE8beqG5cZC=MwWwpCH zF2WjUTDf_(Eyx+O;(}$YCTTq18+~Lu>+co(r25@y`+wN&q!oCQ-P&`iUWK*a35*Lg z-~{C+l(gBZ7#{}%Z5K8Z?-bWClfLpe&34S+vCdnVp40G-;mgmqe@@uSw={@3^)L2-oOXw@~ zu)(#o#VbyPw@@Y9B|6t)ocI>Y?e^@V^(B?;TEC<#y3MRRRcjoK7K!lHV0`^a27G&K;BL@nDYB-3oAO>zf-Mlu{4KmT9E9bMxS(LAr|?_(1$nxFdMAicc&$#z}dVQP|!Q4fwI6w9YU0SZFiV9*5DEEgDZg$1Qb&9C^%st+oWJ3)IAE4 z1L&d^2?u+8md%DJ$2^or!av>!cYdb5o9=9Z=FZmV{cs{=CwBc?4kiX!NA}Aj`RUW~ z({u9Y7{oSL+jx5y3jrkPPpw9Www^(0d+eFtKh^l^%38OJjHLQcE#wADMB3A*r{_ev zWBmyRQT#)-{b0hzg>{RrE|Z1nbBl>QGR`Kd?T(-Ja+IQ-Icc^@<`EXe%n>-N4P5s# z+u~%x`%aUg&)#8Bd~6ORlQk=+Huv(kHO9A{|0t6&G;%~0yg`!KOvC-UU`4`$I&$>u z3VzY~sTaa=S)7XLCMT25a*$T`sllX$-jIPimV5FF1pHP{j?28)0+$N~6H2q@3O=w2 zE5D4Mq8(9Tm8&QEUP}_&)s81+fv=UR3f^jAV2qM-oQM(KKo10$5GUGdHx?9pNX;)! zWEEYvxH(iVdo0aH;Ft$_q{A55rb|6I3f=y`-GP@hNseT+b}%t?2u%lMq!4c@=-
  • DdQ!lThn6 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 D08vzP literal 0 HcmV?d00001 diff --git a/leetcode/1301-1400/1368.Minimum-Cost-to-Make-at-Least-One-Valid-Path-in-a-Grid/3.png b/leetcode/1301-1400/1368.Minimum-Cost-to-Make-at-Least-One-Valid-Path-in-a-Grid/3.png new file mode 100644 index 0000000000000000000000000000000000000000..d8c7ecc708a4c98328d58a9595b7338a6c1eb4b7 GIT binary patch literal 2502 zcmd5;dsNa{9tYD9Eqo<43Yw+4ldoEbEXpi2DH+Y&3=q+@On1J3cw!D2u>0b)`uXojBjJP86-F?3gh zwA3;*>NJrG0>PebF0k>RJW|v;(iyjt=i>vWW!F059XnE8X9rBbeSkou zP`$MW;@|5dQhh|PprW+&0*ii-X>&RUuPSIO3b=bqQ?xjaVmY?;KQRZTt_3YSoUmnY z8HOVD&ni>mF_7m*=-mY(@P{hsjSB$M*F#y{67Q(UXR}2CDtAb0K_AC)SU%L)#4^J&6Js2ZG2JKQjq8RO zujxBI0%z)fXtxL4+EhIoFTaMCF}PEnsnp4IqE=RktN3uRZ?gXwyMc+0*L|!?f$v~xL zM$W8qgQ@L8tN6T=NVWg!w8mjPVX^8xTBG4iC z`jX~oD$PlmuUpdU4x7m89R5<_y}a+qpW`u7d$#(;0dYaEyl(h7@OIzPqw#i074Mf; zb@H9|?#Z}GdNS-&I7`ZmxJ$rUtawC%NnH{T%6E0^qWXzz){e&Bm^iXk~r*ePoA)1|SL!WRXN8wBv zlNg{K$gI(jscY@j(PLvqz^!m-9xKjt!d6{%!JZ2DtCCBa4q2k~D0)HH(#t)x4618D z7r$FwgjA!PgQ{f{@=SMPrt?$<37<}o(11RF1HO)BD_V7LWrT+wN zjYD>;gOg^rf)X^3%`FH&k^aCw(dp@`<$g!VNygW zcZeY00!QZWH{hQu6}Cx#i|3kSDy}DCec~xEFnKK^p>|N{vUb>cd1huLR*yjIF)b{n zo;`ojna%C(Xt|A4XOzvC(}f%BgB=JiOkx0hpR`Tp^Daf2#?!#&C@ z2U)@I`$7t#WUWkFM=mVD2uSs?x8uT|8Ud{Qs$a^`i%gMmOvkh8DMcIx-{KP`@DIi{ z-|xLC0weW-JJ|%P-UZ}KBf!*uX}mSN*{Rk;X@CCp57kr3T#@mG;Amp(Y_5o0+^!YU zBer4NJRW_ewxka8M0ZywrwEIQt1kJQtg15S_)ooJQ}$lLu8(+gtL~(AhPnS)rC04- zanq-jkfw3~&cMy`oPK2~4RY)+i3Me$r=k|S3LjzLW;e{$6>cz+m*(py#mO!kb0c$M zg*F1uPKvk9of*r-$ZF@C3I9;34x4NZOBc1?77)_&gg9vyf{4WiJ~bnz;{(@UIk0kg zuAX4OglmaC*S<{J{>^1^e(}%NUc*^U^`?K1O`CBW@m!cH`jIbOTNP&&MH=Rn%rQse zFxWiFLyH)x5gLeAakwGA3#XOey?NnLJ^n%;4a7(})#Ec(wC9{8J0f*V8!7*?iC4y7 zfg;7%0`cWkQN7G;fcIB1j z2W!TsENPW=loZaUclP<#?>MsQX0x>~DtgrH*=I?cb*ufj?fp*FG6&XnK#c=|Yr#qa z&$}z6e0sH_ZVcU%e5^cx?ntB^xD=tCpzF^445dm%kDvOw1uZ?h;fO3{HrHuy!}(`R zk!!nTYS@XuZ2HauDFd%LZGa{O-R&QtFZ>46w;wxj58|4VD#Q1}B3%3C%+c&b{Zp1nY4PI (0, 1) --> (0, 2) --> (0, 3) change the arrow to down with cost = 1 --> (1, 3) --> (1, 2) --> (1, 1) --> (1, 0) change the arrow to down with cost = 1 --> (2, 0) --> (2, 1) --> (2, 2) --> (2, 3) change the arrow to down with cost = 1 --> (3, 3) +The total cost = 3. +``` + +**Example 2:** + +![2](./2.png) + +``` +Input: grid = [[1,1,3],[3,2,2],[1,1,4]] +Output: 0 +Explanation: You can follow the path from (0, 0) to (2, 2). +``` + +**Example 3:** + +![3](./3.png) + +``` +Input: grid = [[1,2],[4,3]] +Output: 1 +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-cost-to-make-at-least-one-valid-path-in-a-grid +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1301-1400/1368.Minimum-Cost-to-Make-at-Least-One-Valid-Path-in-a-Grid/Solution.go b/leetcode/1301-1400/1368.Minimum-Cost-to-Make-at-Least-One-Valid-Path-in-a-Grid/Solution.go index d115ccf5e..9547a6294 100755 --- a/leetcode/1301-1400/1368.Minimum-Cost-to-Make-at-Least-One-Valid-Path-in-a-Grid/Solution.go +++ b/leetcode/1301-1400/1368.Minimum-Cost-to-Make-at-Least-One-Valid-Path-in-a-Grid/Solution.go @@ -1,5 +1,78 @@ package Solution -func Solution(x bool) bool { +import "container/heap" + +// x, y, cost, dir +type heap1368 [][4]int + +func (h *heap1368) Len() int { + return len(*h) +} +func (h *heap1368) Swap(i, j int) { + (*h)[i], (*h)[j] = (*h)[j], (*h)[i] +} + +func (h *heap1368) Less(i, j int) bool { + return (*h)[i][2] < (*h)[j][2] +} +func (h *heap1368) Push(x any) { + *h = append(*h, x.([4]int)) +} + +func (h *heap1368) Pop() any { + old := *h + l := len(old) + x := old[l-1] + *h = old[:l-1] return x } + +var dir1368 = [4][2]int{ + {0, 1}, {0, -1}, {1, 0}, {-1, 0}, +} + +func Solution(grid [][]int) int { + m, n := len(grid), len(grid[0]) + if m == 1 && n == 1 { + return 0 + } + inf := m*n + 1 + dp := make([][]int, m) + for i := range m { + dp[i] = make([]int, n) + for j := range n { + dp[i][j] = inf + } + } + // 就是优先队列 + dp[0][0] = 0 + h := &heap1368{} + if grid[0][0]&1 == 0 { + dp[0][0] = 1 + heap.Push(h, [4]int{0, 0, 1, 1}) + heap.Push(h, [4]int{0, 0, 1, 3}) + } else { + heap.Push(h, [4]int{0, 0, 0, grid[0][0]}) + } + for h.Len() > 0 { + cur := heap.Pop(h).([4]int) + if cur[0] == m-1 && cur[1] == n-1 { + return cur[2] + } + for i, d := range dir1368 { + nx, ny := cur[0]+d[0], cur[1]+d[1] + if nx < m && nx >= 0 && ny < n && ny >= 0 { + cost := cur[2] + if i != cur[3]-1 { + cost++ + } + if dp[nx][ny] > cost { + dp[nx][ny] = cost + heap.Push(h, [4]int{nx, ny, cost, grid[nx][ny]}) + } + } + } + } + + return -1 +} diff --git a/leetcode/1301-1400/1368.Minimum-Cost-to-Make-at-Least-One-Valid-Path-in-a-Grid/Solution_test.go b/leetcode/1301-1400/1368.Minimum-Cost-to-Make-at-Least-One-Valid-Path-in-a-Grid/Solution_test.go index 14ff50eb4..fc46755fc 100755 --- a/leetcode/1301-1400/1368.Minimum-Cost-to-Make-at-Least-One-Valid-Path-in-a-Grid/Solution_test.go +++ b/leetcode/1301-1400/1368.Minimum-Cost-to-Make-at-Least-One-Valid-Path-in-a-Grid/Solution_test.go @@ -10,12 +10,12 @@ 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{{1, 1, 1, 1}, {2, 2, 2, 2}, {1, 1, 1, 1}, {2, 2, 2, 2}}, 3}, + {"TestCase2", [][]int{{1, 1, 3}, {3, 2, 2}, {1, 1, 4}}, 0}, + {"TestCase3", [][]int{{1, 2}, {4, 3}}, 1}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { }