直接做网站的软件,创建全国文明城市标语口号,网站建设第一品牌,沧浪企业建设网站电话文章目录 LeetCode#xff1f;启动#xff01;#xff01;#xff01;题目#xff1a;找出不同元素数目差数组题目描述代码与解题思路 每天进步一点点 LeetCode#xff1f;启动#xff01;#xff01;#xff01; 好久没写每日一题题解了#xff0c;今天重新起航
干… 文章目录 LeetCode启动题目找出不同元素数目差数组题目描述代码与解题思路 每天进步一点点 LeetCode启动 好久没写每日一题题解了今天重新起航
干一件事情永远不会太迟只要现在开始做什么都不算晚
题目找出不同元素数目差数组
题目链接994. 腐烂的橘子
题目描述 代码与解题思路
思路如标题这道题是一道经典的多源 BFS 题目
func orangesRotting(grid [][]int) int {var dx []int{0, 1, -1, 0}var dy []int{1, 0, 0, -1}n, m : len(grid), len(grid[0])q : [][]int{}// 把第一轮需要 bfs 的节点找出for i : range grid {for j, v : range grid[i] {if v 2 {q append(q, []int{i, j})}}}ans : 0for len(q) 0 {// 进行一轮 bfsfor sz : len(q); sz 0; sz-- {t : q[0]q q[1:]for i : 0; i 4; i {x, y : dx[i]t[0], dy[i]t[1]if x 0 || x n || y 0 || y m || grid[x][y] ! 1 {continue}grid[x][y] 2q append(q, []int{x, y})}}if len(q) 0 {ans}}// 如果还有新鲜的橘子, 则返回 -1for i : range grid {for _, v : range grid[i] {if v 1 {return -1}}}return ans
} 这是经典的多源 bfs 解题模板我的解法不过最后再遍历一次判断是否还有新鲜橘子的操作可能略有些丑陋
可以看看灵神的判断方式通过 fresh 变量的计数判断
type pair struct{ x, y int }
var directions []pair{{-1, 0}, {1, 0}, {0, -1}, {0, 1}} // 四方向func orangesRotting(grid [][]int) int {m, n : len(grid), len(grid[0])fresh : 0q : []pair{}for i, row : range grid {for j, x : range row {if x 1 {fresh // 统计新鲜橘子个数} else if x 2 {q append(q, pair{i, j}) // 一开始就腐烂的橘子}}}ans : -1for len(q) 0 {ans // 经过一分钟tmp : qq []pair{}for _, p : range tmp { // 已经腐烂的橘子for _, d : range directions { // 四方向i, j : p.xd.x, p.yd.yif 0 i i m 0 j j n grid[i][j] 1 { // 新鲜橘子fresh--grid[i][j] 2 // 变成腐烂橘子q append(q, pair{i, j})}}}}if fresh 0 {return -1}return max(ans, 0)
}每天进步一点点 可以和我刷一辈子的每日一题吗 一题一题积累起来就是一辈子。