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

深圳网站建设小程序成都门户网站建设

深圳网站建设小程序,成都门户网站建设,太原网站开发团队,重庆网站快速排名提升多源广度优先搜索 所有的腐烂橘子在广度优先搜索上是等价于同一层的节点的。假设这些腐烂橘子刚开始是新鲜的,而有一个腐烂橘子(我们令其为超级源点)会在下一秒把这些橘子都变腐烂,而这个腐烂橘子刚开始在的时间是 −1,那么按照广度优先搜索…

多源广度优先搜索

  • 所有的腐烂橘子在广度优先搜索上是等价于同一层的节点的。
  • 假设这些腐烂橘子刚开始是新鲜的,而有一个腐烂橘子(我们令其为超级源点)会在下一秒把这些橘子都变腐烂,而这个腐烂橘子刚开始在的时间是 −1,那么按照广度优先搜索的算法,下一分钟也就是第 0分钟的时候,这个腐烂橘子会把它们都变成腐烂橘子,然后继续向外拓展,所以其实这些腐烂橘子是同一层的节点。那么在广度优先搜索的时候,我们将这些腐烂橘子都放进队列里进行广度优先搜索即可,最后每个新鲜橘子被腐烂的最短时间 dis[x][y] 其实是以这个超级源点的腐烂橘子为起点的广度优先搜索得到的结果。
  • 为了确认是否所有新鲜橘子都被腐烂,可以记录一个变量 cnt 表示当前网格中的新鲜橘子数,广度优先搜索的时候如果有新鲜橘子被腐烂,则 cnt=cnt−1 ,最后搜索结束时如果 cnt 大于 0,说明有新鲜橘子没被腐烂,返回 −1 ,否则返回所有新鲜橘子被腐烂的时间的最大值即可,也可以在广度优先搜索的过程中把已腐烂的新鲜橘子的值由 1 改为 2,最后看网格中是否有值为 1 即新鲜的橘子即可。
class Solution {// 用于上下左右移动int[] row = new int[]{0, 1, 0, -1};int[] col = new int[]{1, 0, -1, 0};public int orangesRotting(int[][] grid) {int r = grid.length;int c = grid[0].length;// 先把所有烂了的橘子放入队列中Queue<Integer> queue = new ArrayDeque<>();Map<Integer, Integer> map = new HashMap<>();  // <橘子, 第几秒烂的>for(int i=0; i<r; i++){for(int j=0; j<c; j++){if(grid[i][j]==2){int location = i*c + j;   // 用一个数标识二维数组的位置queue.add(location);map.put(location, 0);}}}// 烂橘子感染所有好橘子int ret = 0;while(!queue.isEmpty()){int node = queue.remove();int node_r = node/c;int node_c = node%c;for(int k=0; k<4; k++){// 得到四周的橘子int i = node_r + row[k];int j = node_c + col[k];if(i>=0 && i<r && j>=0 && j<c && grid[i][j]==1){ //记得判断ij的范围// 好的橘子被感染grid[i][j] = 2;int location = i*c+j;queue.add(location);map.put(location, map.get(node)+1);ret = map.get(location);}}}// 查看是否有好的橘子for(int[] row:grid){for(int v:row){if(v==1){return -1;}}}return ret;}
}

注意:

  • queue用于广度优先遍历;map用于存储<腐烂的橘子location,第几秒烂的>
  • 在感染四周的好橘子的时候,要记得判断ij的范围
  • LinkedList和ArrayDeque的区别:
    • 操作:
      ArrayDeque:add() remove()
      LinkedList:offer() poll() peek()

    • 底层实现:
      ArrayDeque:基于可变长的数组和双指针来实现。
      LinkedList:基于双向链表来实现。

    • 支持的元素
      ArrayDeque:不支持存储 null 数据。
      LinkedList:支持存储 null 数据。

    • 引入版本
      ArrayDeque:在 JDK 1.6 中被引入。
      LinkedList:早在 JDK 1.2 中就已经存在。

    • 插入性能
      ArrayDeque:插入时可能存在扩容过程,但均摊后的插入操作依然为 O(1)。
      LinkedList:每次插入数据时均需要申请新的堆空间,均摊性能相比更慢。

参考:

Java ArrayDeque 与 LinkedList 的区别?

http://www.dtcms.com/wzjs/824300.html

相关文章:

  • 想要建设一个网站都需要注意什么如何开发应用
  • 最好的免费的黄页网站竞价单页制作
  • 网站管理助手建站营销活动有哪些
  • 网站建设销售前景网站托管服务 重庆
  • 自己做盗版小说网站吗网站商城注意事项
  • 钉钉小程序开发优化公司组织结构
  • 哪个网站好网站做多少屏合适
  • 网站维护费用怎么收网站建设的结论
  • 邯郸网站建设产品介绍html网页制作菜鸟教程
  • 做电影网站赚钱云电脑平台哪个免费
  • 安徽住房与城乡建设部网站鹏翔科技 网站建设
  • 医院网站可以自己做吗学校网络营销推广方案
  • 网站托管工作室灰色关键词排名方法
  • 成都专业vi设计公司昆山优化外包
  • 安徽建设工程实名制网站品牌网站制作公司
  • 展示型企业网站例子wordpress设定域名
  • wordpress主题微信小程序整站优化深圳
  • 南通制作网站公司上海松江水处理网站建设
  • 揭阳网站制作方案定制个人备案网站做淘宝客可以用吗
  • 青岛 制作网站 大点的公司wordpress网站主修改
  • 公司做网站的价格几千元百度seo关键词优化推荐
  • 智能搭建网站简单的个人网页制作html
  • 网站做视频的怎么赚钱网站建设伍际网络
  • 建设门户网站 业务模板百度不更新网站
  • 连云港市网站设计wordpress 爱情
  • 自己的网站源代码一片空白做网站会犯法吗
  • 东莞网站推广运营公司2345网址大全浏览器
  • 上海浦东新区科技网站建设网站内部seo优化包括
  • 迅博威网站建设平台网站建设公司
  • 网站建设html代码优化网站检测工具