回复: 16
跳转到指定楼层
上一主题 下一主题
收起左侧

地里的大牛帮我找找bug吧 😿

全局:

2021(1-3月) 码农类General 硕士 全职@google - 网上海投 - Onsite 其他  | | Other | 在职跳槽

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
之前一道岛屿题很高频,看起来以为很简单, 想试下那个one pass的方法, 结果两天改了无数版本 都没搞定 忧郁。。。。。地里的大牛们帮我看看吧 感激不尽!!
原题是这个:
第四轮:印度小哥。最近热
您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限 或 查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
面积,如果触及边界上的水域就返回-1表示无效,然后把四面valid的面积累加。

  1. public class  Island{
  2.     public static void main(String args[]) {

  3.         Island is = new Island();
  4.         int[][] matrix = new int[][]{{0,0,0,1,1,0},{0,0,1,0,0,1},{0,0,1,0,0,1},{0,0,0,1,1,0},{1,1,1,0,0,0},{1,0,1,0,0,0},{1,1,1,0,0,0}};

  5.       System.out.println(is.findMaxArea(matrix));
  6.     }

  7.     public int findMaxArea(int[][] matrix){

  8.          int row = matrix.length;
  9.          int col = matrix[0].length;
  10.          int maxArea = 0;
  11.          boolean[][] visited = new boolean[row][col];
  12.          int[] dx = new int[]{0, 0, 1, -1};
  13.          int[] dy = new int[]{1, -1, 0, 0};

  14.         for(int i = 0; i< matrix.length; i++){

  15.             for(int j = 0; j < matrix[0].length; j++){

  16.                 if(matrix[i][j] != 1) continue;

  17.                 maxArea = Math.max(maxArea, dfs(i, j, matrix, visited, dx, dy));

  18.                 //System.out.println("maxArea = " + maxArea);
  19.             }
  20.         }

  21.         return maxArea;   
  22.      }

  23. public int dfs(int x, int y, int[][] matrix, boolean[][] visited, int[] dx, int[] dy){

  24.          if(x < 0 || y < 0 || x >= matrix.length || y >= matrix[0].length || matrix[x][y] == -1) return -1;
  25.          if(visited[x][y]) return 0;

  26.          int total = 1;
  27.          visited[x][y] = true;

  28.          for(int i = 0; i < 4; i++){

  29.              int x1 = x + dx[i];
  30.              int y1 = y + dy[i];

  31.              int area = dfs(x1, y1, matrix, visited, dx, dy);

  32.              if(area == -1){
  33.                 if(matrix[x][y] == 0){
  34.                     matrix[x][y] = -1;
  35.                     return -1;
  36.                 }
  37.              }
  38.              else total += area;
  39.          }

  40.          matrix[x][y] = -1;
  41.          return total;
  42.      }
  43. }


复制代码


上一篇:Amazon OA1 OA2题目
下一篇:替课逃课 2轮gui经
全局:
这个只需要从边界的0做起点,可看多少个0相连。总数减去0的个数就可以了吧。一遍扫描就可以了
回复

使用道具 举报

全局:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限 或 查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies

评分

参与人数 1大米 +2 收起 理由
BambiBrownie + 2 给你点个赞!

查看全部评分

回复

使用道具 举报

推荐
 楼主| emmagxz123 2021-1-28 13:30:39 | 只看该作者
全局:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限 或 查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
回复

使用道具 举报

🔗
qwseda123 2021-1-28 03:19:11 | 只看该作者
全局:
如果触及边界上的水域就返回-1表示无效

试着改成 如果触及边界上的水域就返回0表示无效 ?
回复

使用道具 举报

🔗
 楼主| emmagxz123 2021-1-28 10:16:55 | 只看该作者
全局:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限 或 查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
回复

使用道具 举报

全局:
emmagxz123 发表于 2021-1-28 10:16
太厉害了!感激!!
还有一个疑问是像下面这个矩阵 第二行的两个零算被1包围了么? 因为 四个角是0
011 ...

我觉得你说的很有道理,这两个0确实被包围了,但是说不清楚是属于哪个island,我的代码输出是4,我觉得4应该不对
回复

使用道具 举报

🔗
zdj0712 2021-1-28 13:33:47 | 只看该作者
全局:
这道我也有疑问的。比如一个0有上面和右边两个方向会接触到别的0,先去了右边的0周围都是新的1,这些1我就都设为visit了。后访问上面的方向,发现是在边界上,最终返回-1。那么问题来了,先访问的右边的0旁边的1我怎么能改回unvisited,因为下次还需要以它们为起点重新dfs.
回复

使用道具 举报

全局:
emmagxz123 发表于 2021-1-28 13:30
我又更新了一下代码 感觉很接近了, 但是 还是不对lol
public class  Island{
    public static void  ...

你觉得这个例子应该返回什么才对?
回复

使用道具 举报

🔗
 楼主| emmagxz123 2021-1-28 14:18:40 | 只看该作者
全局:
格林匹施ZELQ 发表于 2021-1-28 13:44
你觉得这个例子应该返回什么才对?

12吧?如果一个零的上下左右 都不会到边界的话 应该就算被包围了? 不知道是不是这么理解呢?@@
回复

使用道具 举报

全局:
emmagxz123 发表于 2021-1-28 14:18
12吧?如果一个零的上下左右 都不会到边界的话 应该就算被包围了? 不知道是不是这么理解呢?@@

那也应该是8才对吧,四个角不算?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表