当前位置: 首页 > news >正文

【LeetCode】每日一题 2024_5_13 腐烂的橘子(经典多源 BFS)

文章目录

  • 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.x+d.x, p.y+d.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)
}

每天进步一点点

可以和我刷一辈子的每日一题吗?
一题一题,积累起来就是一辈子。

http://www.lryc.cn/news/347721.html

相关文章:

  • 【Linux系统编程】第十七弹---进程理解
  • 【网络安全入门】你必须要有的学习工具(附安装包)零基础入门到进阶,看这一篇就够了!
  • 【解决】:git clone项目报错fatal: fetch-pack: invalid index-pack output
  • python随机显示四级词汇
  • vuerouter声明式导航
  • 视频断点上传
  • 清华团队开发首个AI医院小镇模拟系统;阿里云发布通义千问 2.5:超越GPT-4能力;Mistral AI估值飙升至60亿美元
  • React Suspense与Concurrent Mode:探索异步渲染的新范式
  • 算法训练营day37
  • 基础ArkTS组件:帧动画,内置动画组件,跑马灯组件(HarmonyOS学习第三课【3.6】)
  • vant NavBar 导航栏详解
  • Python自动化办公实战案例:文件整理与邮件发送
  • 2024中国(重庆)无人机展览会8月在重庆举办
  • 自动驾驶技术与传感器数据处理
  • 高效测评系统方案助力沃尔玛、亚马逊卖家提升产品销量
  • B/S模式的web通信(高并发服务器)
  • C语言每日一题—约瑟夫问题
  • 语言:C#
  • [力扣题解]45. 跳跃游戏 II
  • pywinauto操作windows应用(未完成)
  • (超详细讲解)实现将idea的java程序打包成exe (新版,可以在没有java的电脑下运行,即可以发给好朋友一起玩)
  • 学习软考----数据库系统工程师29
  • STL中的优先级队列
  • 浅谈Acrel-2000ES储能能量管理系统的设计与应用-安科瑞 蒋静
  • 会员卡积分小程序系统源码商业运营版 行业一站式解决方案附带源代码以及搭建安装部署教程
  • uniapp 百度地图 拖动获取经纬度级搜索连用
  • Yarn的安装和使用详细教程(Mac/Window)
  • 高考志愿系统-学生管理模块分析
  • 【问题实操】银河高级服务器操作系统实例分享,开机之后反复重启
  • 攻防世界-web-unseping