失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > leetcode算法入门 第七天 广度优先搜索/深度优先搜索

leetcode算法入门 第七天 广度优先搜索/深度优先搜索

时间:2019-01-24 07:02:00

相关推荐

leetcode算法入门 第七天 广度优先搜索/深度优先搜索

leecode练习

733.图像渲染695.岛屿最大面积

733.图像渲染

这道题题目很绕,其实就是一道深度优先搜索,将像素值相同的所有连通区域修改成新的像素值,只需要记录旧的像素值进行递归遍历即可。

public int[][] floodFill(int[][] image, int sr, int sc, int newColor) {int oldColor = image[sr][sc];dfs(image,sr,sc, oldColor,newColor);return image;}public void dfs(int[][] image, int sr, int sc, int oldColor, int newColor) {if(sr < 0 || sc < 0 || sr >= image.length || sc >= image[0].length || image[sr][sc] != oldColor || oldColor == newColor) {return;}image[sr][sc] = newColor;dfs(image, sr + 1, sc, oldColor, newColor);dfs(image, sr - 1, sc, oldColor, newColor);dfs(image, sr, sc + 1, oldColor, newColor);dfs(image, sr, sc - 1, oldColor, newColor);}

695.岛屿最大面积

这道题需要注意的就是找起始点,还有记录遍历过的岛屿数。

public int maxAreaOfIsland(int[][] grid) {int row = grid.length;int col = grid[0].length;int max = 0;for(int i=0; i<row; i++) {for(int j=0; j<col; j++) {// 深度优先遍历max = Math.max(max, dfs(grid, i, j));}}return max;}int dfs(int[][] grid, int x, int y) {// 边界检查// 数组为0 直接返回if(x < 0 || x >= grid.length || y < 0 || y >= grid[0].length || grid[x][y] == 0) {return 0;}// 不为0 即为1 修改成0 避免下次再计算到grid[x][y] = 0;// 当前出发, 向上下左右四个方向出发return 1 + dfs(grid, x+1, y) + dfs(grid, x-1, y) + dfs(grid, x, y+1) + dfs(grid, x, y-1);}

如果觉得《leetcode算法入门 第七天 广度优先搜索/深度优先搜索》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。