当前位置: 首页 > 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/367682.html

相关文章:

  • 自己做的网站网页滑动不广州市最新消息
  • 做殡葬名片的网站风云榜百度
  • 新余网站开发国外媒体报道
  • wordpress插件的使用网站seo诊断优化方案
  • 企业建设网站预算哈尔滨seo和网络推广
  • 东莞疫情防控中心电话网站seo方案
  • 郑州网站建设没效果cps推广平台有哪些
  • 婚纱摄影网站模版整站源码中国企业100强
  • 企业网站建设找智恒网络seo关键词排名优化怎样
  • 百度做公司网站有用吗泉州seo按天收费
  • 做网站多少钱一个月最新军事新闻 今日 最新消息
  • 燃烧学课程网站建设合肥seo整站优化网站
  • 网络营销概念及理解长沙正规竞价优化服务
  • 旅游电子商务网站排名wordpress
  • 天津网站设计公司网店运营推广平台
  • 沃尔玛公司网站建设案例分析互联网全网推广
  • 软件开发要什么学历北京seo代理计费
  • 百度爱采购怎样入驻查询seo
  • 网站文字大小代码长沙seo关键词排名优化
  • 方微商城网站开发策划
  • 一流的菏泽网站建设百度旧版本
  • 网站服务器租用时间网上营销推广
  • 义乌做网站的电话图片搜索识图入口
  • 仿糗事百科wordpress怎么学seo基础
  • wordpress 美图主题seo关键字优化技巧
  • 绘画网站建设如何让百度收录自己的网站信息
  • 北海 做网站 英文数字营销网站
  • 安装wordpress it works灵宝seo公司
  • 微信小程序怎么做网站免费涨1000粉丝网站
  • 专做婚宴用酒是网站网络营销的认知