你有一个用于表示一片土地的整数矩阵land,该矩阵中每个点的值代表对应地点的海拔高度。若值为0则表示水域。由垂直、水平或对角连接的水域为池塘。池塘的大小是指相连接的水域的个数。编写一个方法来计算矩阵中所有池塘的大小,返回值需要从小到大排序。

示例:

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

代码

class Solution {public int[] pondSizes(int[][] land) {int[][] dir=new int[][]{{-1,0},{1,0},{0,1},{0,-1},{1,1},{1,-1},{-1,1},{-1,-1}};//方向PriorityQueue<Integer> heap=new PriorityQueue<>();for(int i=0;i<land.length;i++)for(int j=0;j<land[0].length;j++)//处理0元素作为入口{if(land[i][j]>0) continue;int res=pond(land,dir,i,j);if(res>0) heap.add(res);} int num=heap.size();int[] res=new int[num];for(int i=0;i<num;i++)res[i]=heap.poll();return res;}public int pond(int[][] land,int[][] dir,int x,int y) {if(x<0||y>=land[0].length||y<0||x>=land.length||land[x][y]!=0)//不在范围内或不满足水域的条件return 0;int sum=1;land[x][y]=Integer.MAX_VALUE;//置为访问for(int[] d:dir)//遍历所有方向{int nextX=d[0]+x,nextY=d[1]+y;sum+=pond(land,dir,nextX,nextY);}return sum;}
}

leetcode面试题 16.19. 水域大小(深度优先搜索)相关推荐

  1. LeetCode——面试题 16.19. 水域大小

    水域大小 题目 深搜思路 代码 结果 广搜思路 代码 结果 题目 你有一个用于表示一片土地的整数矩阵land,该矩阵中每个点的值代表对应地点的海拔高度.若值为0则表示水域.由垂直.水平或对角连接的水域 ...

  2. leetcode —— 面试题 16.19. 水域大小

    你有一个用于表示一片土地的整数矩阵land,该矩阵中每个点的值代表对应地点的海拔高度.若值为0则表示水域.由垂直.水平或对角连接的水域为池塘.池塘的大小是指相连接的水域的个数.编写一个方法来计算矩阵中 ...

  3. Leetcode每日一题:面试题16.19.水域大小

    简单的DFS //八个方位 const int dx[8] = {1, -1, 0, 0, -1, -1, 1, 1}; const int dy[8] = {0, 0, 1, -1, -1, 1, ...

  4. 面试题 16.19.水域大小

    你有一个用于表示一片土地的整数矩阵land,该矩阵中每个点的值代表对应地点的海拔高度.若值为0则表示水域.由垂直.水平或对角连接的水域为池塘.池塘的大小是指相连接的水域的个数.编写一个方法来计算矩阵中 ...

  5. 程序员面试金典 - 面试题 16.19. 水域大小(BFS/DFS)

    1. 题目 你有一个用于表示一片土地的整数矩阵 land,该矩阵中每个点的值代表对应地点的海拔高度. 若值为0则表示水域.由垂直.水平或对角连接的水域为池塘. 池塘的大小是指相连接的水域的个数. 编写 ...

  6. LeetCode解析------111. 二叉树的最小深度-深度优先搜索

    题目: 给定一个二叉树,找出其最小深度. 最小深度是从根节点到最近叶子节点的最短路径上的节点数量. 说明: 叶子节点是指没有子节点的节点. 示例: 给定二叉树 [3,9,20,null,null,15 ...

  7. leetcode面试题 16.26. 计算器(栈)

    给定一个包含正整数.加(+).减(-).乘(*).除(/)的算数表达式(括号除外),计算其结果. 表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 . 整数除法仅保留整数部分. 示例 1: ...

  8. leetcode面试题 16.21. 交换和(二分查找)

    给定两个整数数组,请交换一对数值(每个数组中取一个数值),使得两个数组所有元素的和相等. 返回一个数组,第一个元素是第一个数组中要交换的元素,第二个元素是第二个数组中要交换的元素.若有多个答案,返回任 ...

  9. leetcode面试题 16.04. 井字游戏

    设计一个算法,判断玩家是否赢了井字游戏.输入是一个 N x N 的数组棋盘,由字符" ","X"和"O"组成,其中字符" &quo ...

最新文章

  1. 通配符?子字符串匹配主字符串次数_突破LeetCode,拿BAT大厂offer之《正则表达式匹配》(动态规划)...
  2. 【错误记录】Google Play 上架报错 ( APK 大小 | 目标 API 级别 | Google Play 帮助文档 )
  3. python的回溯信息_基于Python的回溯算法
  4. SqlServer 增加字段,修改字段名,删除字段,修改字段默认值
  5. QT学习:线程等待与唤醒
  6. bzoj1051: [HAOI2006]受欢迎的牛
  7. java action 上传文件_Struts2实现单文件或多文件上传功能
  8. Simple Addition expression【打表+二分】
  9. python no module named pandas_【原创】大叔经验分享(11)python引入模块报错ImportError: No module named pandas numpy...
  10. 桥接设计模式(Bridge)
  11. 基础知识学习-数据结构篇
  12. 《photon中配置lite的相关问题》
  13. android窗口泄漏
  14. JAVA 线程池的分析和使用
  15. 04-乐优商城项目搭建
  16. nodejs下载慢问题
  17. MATLAB数字图像处理
  18. 断网会导致xml加载失败数据库失败,识别不了,mybatis官网
  19. MySQL的数据库导出命令
  20. 金融数据安全分类分级解决方案

热门文章

  1. truncate、rename函数的使用
  2. Cookie,Session基础知识
  3. 腾腾流氓,云云更流氓(问微信怎样接入支付宝支付),手贱的赶紧点,你会感谢我的...
  4. Jenkins --SVN
  5. Visual Studio无法查找或打开 PDB 文件解决办法
  6. Ubuntu安装qwt步骤
  7. struts:file 提交给action后获取文件信息
  8. C#中字符串保留双引号
  9. Ubuntu安装桌面环境
  10. hping3工具DOS攻击实验