leetcode面试题 16.19. 水域大小(深度优先搜索)
你有一个用于表示一片土地的整数矩阵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. 水域大小(深度优先搜索)相关推荐
- LeetCode——面试题 16.19. 水域大小
水域大小 题目 深搜思路 代码 结果 广搜思路 代码 结果 题目 你有一个用于表示一片土地的整数矩阵land,该矩阵中每个点的值代表对应地点的海拔高度.若值为0则表示水域.由垂直.水平或对角连接的水域 ...
- leetcode —— 面试题 16.19. 水域大小
你有一个用于表示一片土地的整数矩阵land,该矩阵中每个点的值代表对应地点的海拔高度.若值为0则表示水域.由垂直.水平或对角连接的水域为池塘.池塘的大小是指相连接的水域的个数.编写一个方法来计算矩阵中 ...
- 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, ...
- 面试题 16.19.水域大小
你有一个用于表示一片土地的整数矩阵land,该矩阵中每个点的值代表对应地点的海拔高度.若值为0则表示水域.由垂直.水平或对角连接的水域为池塘.池塘的大小是指相连接的水域的个数.编写一个方法来计算矩阵中 ...
- 程序员面试金典 - 面试题 16.19. 水域大小(BFS/DFS)
1. 题目 你有一个用于表示一片土地的整数矩阵 land,该矩阵中每个点的值代表对应地点的海拔高度. 若值为0则表示水域.由垂直.水平或对角连接的水域为池塘. 池塘的大小是指相连接的水域的个数. 编写 ...
- LeetCode解析------111. 二叉树的最小深度-深度优先搜索
题目: 给定一个二叉树,找出其最小深度. 最小深度是从根节点到最近叶子节点的最短路径上的节点数量. 说明: 叶子节点是指没有子节点的节点. 示例: 给定二叉树 [3,9,20,null,null,15 ...
- leetcode面试题 16.26. 计算器(栈)
给定一个包含正整数.加(+).减(-).乘(*).除(/)的算数表达式(括号除外),计算其结果. 表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 . 整数除法仅保留整数部分. 示例 1: ...
- leetcode面试题 16.21. 交换和(二分查找)
给定两个整数数组,请交换一对数值(每个数组中取一个数值),使得两个数组所有元素的和相等. 返回一个数组,第一个元素是第一个数组中要交换的元素,第二个元素是第二个数组中要交换的元素.若有多个答案,返回任 ...
- leetcode面试题 16.04. 井字游戏
设计一个算法,判断玩家是否赢了井字游戏.输入是一个 N x N 的数组棋盘,由字符" ","X"和"O"组成,其中字符" &quo ...
最新文章
- 通配符?子字符串匹配主字符串次数_突破LeetCode,拿BAT大厂offer之《正则表达式匹配》(动态规划)...
- 【错误记录】Google Play 上架报错 ( APK 大小 | 目标 API 级别 | Google Play 帮助文档 )
- python的回溯信息_基于Python的回溯算法
- SqlServer 增加字段,修改字段名,删除字段,修改字段默认值
- QT学习:线程等待与唤醒
- bzoj1051: [HAOI2006]受欢迎的牛
- java action 上传文件_Struts2实现单文件或多文件上传功能
- Simple Addition expression【打表+二分】
- python no module named pandas_【原创】大叔经验分享(11)python引入模块报错ImportError: No module named pandas numpy...
- 桥接设计模式(Bridge)
- 基础知识学习-数据结构篇
- 《photon中配置lite的相关问题》
- android窗口泄漏
- JAVA 线程池的分析和使用
- 04-乐优商城项目搭建
- nodejs下载慢问题
- MATLAB数字图像处理
- 断网会导致xml加载失败数据库失败,识别不了,mybatis官网
- MySQL的数据库导出命令
- 金融数据安全分类分级解决方案