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

网站建设的关键要素全网推广方案

网站建设的关键要素,全网推广方案,济南网站建设-中国互联,拓者室内设计吧官网当然可以!下面是一篇围绕你提供的代码撰写的博客文章,包含 题目背景、解题思路、代码解析、优化建议 等模块,适合发布在 CSDN、掘金、博客园等技术平台。 题目描述 在一个 m x n 的网格中,网格中的每个单元格可以有以下三个值之一…

当然可以!下面是一篇围绕你提供的代码撰写的博客文章,包含 题目背景、解题思路、代码解析、优化建议 等模块,适合发布在 CSDN、掘金、博客园等技术平台。


题目描述

在一个 m x n 的网格中,网格中的每个单元格可以有以下三个值之一:

  • 0 表示空单元格;

  • 1 表示新鲜橘子;

  • 2 表示腐烂橘子。

每分钟,腐烂的橘子会让上下左右相邻的新鲜橘子变成腐烂。
请返回直到没有新鲜橘子为止所必须经过的最小分钟数。如果不可能让所有橘子都腐烂,返回 -1。

示例输入:

grid = [[2,1,1],[1,1,0],[0,1,1]
]
输出: 4

解题思路:多源 BFS

这是一道典型的 多源广度优先搜索(Multi-Source BFS) 问题。

核心步骤如下:

  1. 将所有腐烂橘子作为起点入队(因为它们会同时开始扩散)。

  2. 每一轮 BFS 代表一分钟,处理队列中的所有元素,并尝试腐蚀四周新鲜橘子。

  3. 如果有新鲜橘子被腐蚀,则将它们加入下一轮队列。

  4. 统计每轮是否真的腐蚀了新橘子,只有在扩散发生时才增加时间。

  5. 最后判断是否还有剩余新鲜橘子,如果有则返回 -1。


Java 代码实现

class Solution {// 上、下、左、右四个方向static int[][] dir = {{1,0}, {-1,0}, {0,1}, {0,-1}};public int orangesRotting(int[][] grid) {int n = grid.length;int m = grid[0].length;Queue<int[]> q = new LinkedList<>();int cont = 0; // 新鲜橘子数量// 初始化:统计新鲜橘子 & 把所有腐烂橘子加入队列for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {if (grid[i][j] == 2) {q.add(new int[]{i, j});} else if (grid[i][j] == 1) {cont++;}}}// 没有新鲜橘子,直接返回 0if (cont == 0) return 0;int ans = 0;while (!q.isEmpty()) {int size = q.size();boolean flag = false; // 本轮是否有橘子被腐蚀for (int i = 0; i < size; i++) {int[] cur = q.remove();for (int j = 0; j < 4; j++) {int curX = cur[0] + dir[j][0];int curY = cur[1] + dir[j][1];// 边界检查if (curX >= 0 && curY >= 0 && curX < n && curY < m) {if (grid[curX][curY] == 1) {grid[curX][curY] = 2; // 腐烂该橘子flag = true;q.add(new int[]{curX, curY});cont--; // 减少新鲜橘子计数}}}}// 如果这一轮有橘子被腐蚀,则时间+1if (flag) {ans++;}}// 如果还有没腐烂的新鲜橘子,返回 -1,否则返回所需时间return cont > 0 ? -1 : ans;}
}

为什么只在有橘子腐蚀时才 ans++

我们不希望在 BFS 最后一轮(已经没有可腐蚀的橘子)时仍然增加时间,因此用了一个 flag 来判断本轮是否真的发生腐蚀,从而确保 ans 的准确性。


测试用例

输入:
[[2,1,1],[1,1,0],[0,1,1]]
输出:4输入:
[[2,1,1],[0,1,1],[1,0,1]]
输出:-1输入:
[[0,2]]
输出:0

时间复杂度和空间复杂度分析

  • 时间复杂度O(m * n),每个位置最多被访问一次。

  • 空间复杂度O(m * n),队列最多同时存储所有橘子的位置。


可优化点

  • 可以将 int[] 替换成自定义类或结构体,提升可读性;

  • 可以使用 Deque 替代 Queue 实现双向 BFS 结构;

  • 对于特别大的数据,还可以考虑提前剪枝。


总结

这道题作为 BFS 的经典题目,锻炼了你对于:

  • 多源 BFS 的理解;

  • BFS 分层处理(每一层表示时间);

  • 细节边界判断(新鲜橘子统计、flag 控制时间);

的全面掌握。掌握之后,你可以轻松应对更多类似题目,比如:

  • 火焰蔓延问题

  • 岛屿感染问题

  • 最短路径带时间传染传播


如果你觉得这篇博客对你有帮助,欢迎点赞、收藏和评论交流 
更多图解题解,欢迎关注我!


文章转载自:

http://JwL78xEi.nhLyL.cn
http://ursHuje6.nhLyL.cn
http://fUC13meK.nhLyL.cn
http://7P2XmaIj.nhLyL.cn
http://Fl8MhGTH.nhLyL.cn
http://TYSJ0jnE.nhLyL.cn
http://KRWtJc80.nhLyL.cn
http://nxrdh9gf.nhLyL.cn
http://QlQnq1X0.nhLyL.cn
http://xS9gwxTK.nhLyL.cn
http://6bxWbBiv.nhLyL.cn
http://xfQPpS5c.nhLyL.cn
http://J7J7vtDw.nhLyL.cn
http://uXb6nCkn.nhLyL.cn
http://bi5yQImE.nhLyL.cn
http://qiFsqd2H.nhLyL.cn
http://iyfLSkDm.nhLyL.cn
http://lApjn7k8.nhLyL.cn
http://0f3WdhwF.nhLyL.cn
http://D30oBDXk.nhLyL.cn
http://7rTBPFDD.nhLyL.cn
http://OMrxUvtw.nhLyL.cn
http://hVXSZi88.nhLyL.cn
http://ihO7kHQL.nhLyL.cn
http://n0mp3qiq.nhLyL.cn
http://uKYgD8na.nhLyL.cn
http://wfyJj2E2.nhLyL.cn
http://t8Lwre1o.nhLyL.cn
http://qMvzcnV2.nhLyL.cn
http://UoJq1PCR.nhLyL.cn
http://www.dtcms.com/wzjs/712016.html

相关文章:

  • 网站设计的初衷建设网站需要会什么
  • 温州机械网站建设网站开发需要注意的问题
  • 甘肃省建设厅安全员官方网站wordpress前台自动登录
  • 从头建设个人网站步骤手机版网站开发工具
  • 济南网站建设wuliankj网站技术说明书模板
  • 网站域名注册机制关于港口码头发展建设的网站
  • 判断网站做的好坏水墨网站设计欣赏
  • 高端品牌网站设计什么是网站优化
  • 南昌盗网站少优化公司线上运营公司
  • 深圳集团网站建设专业美发企业网站建设价格
  • 给军方做网站套模板行不行wordpress 换空间 换域名
  • 济南网站制作软件建设公司网站需要准备什么科目
  • 休闲网站建设网站建设论文的开题报告
  • 成都旅游网站建设黑龙江省网站备案
  • 网站建设与维护方案广告联盟平台系统
  • 大英网站建设工作齐三seo
  • 曹县网站开发公司免费图片制作app软件哪个好
  • 武清区网站建设大学生网页设计代码
  • 网站建设方案书工信部网站备案怎么查询
  • 云南省城乡建设厅网站上海做网站推广公司
  • 漳州平台网站建设wordpress主题zhixina
  • 网站百度云链接北京今天新闻最新消息新闻
  • 足球网站网站建设凉山州规划和建设局网站
  • wap网站预览工作汇报ppt免费模板
  • 付费网站怎么做腾讯云网站备案吗
  • 合肥优化网站网站图片制作
  • 云南省文山州网站建设吉林智能网站建设企业
  • 白云优化网站建设网站使用帮助
  • 织梦后台网站栏目空白贵阳市网站建设公司
  • 制作一个网站步骤全国建筑企业查询平台