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

11月Google和BLOOMBERG实习电面

🔗
 楼主| wjf1990 2015-11-27 02:19:32 | 只看该作者
全局:
bobzhang2004 发表于 2015-11-27 02:14
那个data steam的应该是bucket计数吧,请问楼主那个island周长的是怎么做的?

划完岛了以后DFS
回复

使用道具 举报

🔗
bobzhang2004 2015-11-27 05:14:07 | 只看该作者
全局:

楼主可以具体说一下吗?因为岛的形状可能出现多边形啊,这样的话不好算吧?
回复

使用道具 举报

🔗
jkingxt 2015-11-27 06:39:17 | 只看该作者
全局:
bobzhang2004 发表于 2015-11-27 05:14
楼主可以具体说一下吗?因为岛的形状可能出现多边形啊,这样的话不好算吧?

我觉得是这样的。即使是多边形,计算周长的时候也是可以把他看成是矩形的,这个矩形就是这个多边形的最小外包矩形。然后矩形的四个点的坐标,就是多边行四个方向的最值。
回复

使用道具 举报

🔗
 楼主| wjf1990 2015-11-27 15:33:36 | 只看该作者
全局:
jkingxt 发表于 2015-11-27 06:39
我觉得是这样的。即使是多边形,计算周长的时候也是可以把他看成是矩形的,这个矩形就是这个多边形的最小 ...

duide   jiushizhwyang
回复

使用道具 举报

🔗
bobzhang2004 2015-12-1 13:02:41 | 只看该作者
全局:
写了下max island size,欢迎指教
  1. public class IslandMaximumSize {

  2.         public static void main(String[] args) {
  3.                 int[][] matrix =   {{0, 0, 1, 0},
  4.                                                         {0, 1, 0, 1},
  5.                                                         {0, 1, 0, 1},
  6.                                                         {1, 0, 0, 0},};
  7.                 getIslandMaximumSize(matrix);
  8.         }
  9.        
  10.         public static int getIslandMaximumSize(int[][] matrix) {
  11.                 if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
  12.                         return 0;
  13.                 }
  14.                 int res = 0;
  15.                 for (int i = 0; i < matrix.length; i++) {
  16.                         for (int j = 0; j < matrix[0].length; j++) {
  17.                                 if (matrix[i][j] == 1) {
  18.                                         res = Math.max(res, helper(matrix, i, j));
  19.                                 }
  20.                         }
  21.                 }
  22.                
  23.                 System.out.println(res);
  24.                 return res;
  25.         }
  26.         private static int helper(int[][] matrix, int i, int j) {
  27.                 if (i < 0 || i >= matrix.length || j < 0 || j >= matrix[0].length || matrix[i][j] != 1) {
  28.                         return 0;
  29.                 }
  30.                 matrix[i][j] = 2;
  31.                 int size = 1;
  32.                 int[] dx = {1, -1, 0, 0};
  33.                 int[] dy = {0, 0, 1, -1};
  34.                 for (int k = 0; k < dx.length; k++) {
  35.                         int x = i + dx[k];
  36.                         int y = j + dy[k];
  37.                         size += helper(matrix, x, y);
  38.                 }
  39.                
  40.                 return size;
  41.         }
  42. }
复制代码
回复

使用道具 举报

🔗
bobzhang2004 2015-12-1 13:04:39 | 只看该作者
全局:
写了下max island perimeter的代码,电面考这个代码量真多啊。楼主代码中得输出应该是12? 欢迎指教。
  1. public class IslandPerimeter {
  2.         public static void main(String[] args) {
  3.                 int[][] matrix =   {{0, 0, 1, 0},
  4.                                                         {0, 1, 0, 1},
  5.                                                         {0, 1, 1, 1},
  6.                                                         {1, 0, 1, 0},};
  7.                 int res = getMaxIslandPerimeter(matrix);
  8.                 System.out.println("res " + res);
  9.         }
  10.        
  11.         static class Direction {
  12.                 int left;
  13.                 int right;
  14.                 int up;
  15.                 int down;
  16.                 public Direction(int left, int right, int up, int down) {
  17.                         this.left = left;
  18.                         this.right = right;
  19.                         this.up = up;
  20.                         this.down = down;
  21.                 }
  22.         }
  23.        
  24.         public static int getMaxIslandPerimeter(int[][] matrix) {
  25.                 if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
  26.                         return 0;
  27.                 }
  28.                 int max = 0;
  29.                 int x = -1;
  30.                 int y = -1;
  31.                 for (int i = 0; i < matrix.length; i++) {
  32.                         for (int j = 0; j < matrix[0].length; j++) {
  33.                                 if (matrix[i][j] == 1) {
  34.                                         int size = helper(matrix, i, j);
  35.                                         if (size > max) {
  36.                                                 max = size;
  37.                                                 x = i;
  38.                                                 y = j;
  39.                                         }
  40.                                 }
  41.                         }
  42.                 }
  43.                 Direction direction = new Direction(y, y, x, x);
  44.                 if (x != -1 && y != -1) {
  45.                         getPerimeter(matrix, x, y, direction);
  46.                         return ((direction.down - direction.up + 1) + (direction.right - direction.left + 1)) * 2;
  47.                 } else {
  48.                         return 0;
  49.                 }
  50.         }
  51.        
  52.        
  53.         private static void getPerimeter(int[][] matrix, int x, int y, Direction direction) {
  54.                 if (x < 0 || x >= matrix.length || y < 0 || y >= matrix[0].length || matrix[x][y] != 2) {
  55.                         return;
  56.                 }
  57.                 matrix[x][y] = 1;
  58.                 direction.down = Math.max(direction.down, x);
  59.                 direction.up = Math.min(direction.up, x);
  60.                 direction.left = Math.min(direction.left, y);
  61.                 direction.right = Math.max(direction.right, y);
  62.                 getPerimeter(matrix, x + 1, y, direction);
  63.                 getPerimeter(matrix, x - 1, y, direction);
  64.                 getPerimeter(matrix, x, y + 1, direction);
  65.                 getPerimeter(matrix, x, y - 1, direction);
  66.         }
  67.        
  68.        
  69.         private static int helper(int[][] matrix, int i, int j) {
  70.                 if (i < 0 || i >= matrix.length || j < 0 || j >= matrix[0].length || matrix[i][j] != 1) {
  71.                         return 0;
  72.                 }
  73.                 matrix[i][j] = 2;
  74.                 int size = 1;
  75.                 int[] dx = {1, -1, 0, 0};
  76.                 int[] dy = {0, 0, 1, -1};
  77.                 for (int k = 0; k < dx.length; k++) {
  78.                         int x = i + dx[k];
  79.                         int y = j + dy[k];
  80.                         size += helper(matrix, x, y);
  81.                 }
  82.                
  83.                 return size;
  84.         }
  85. }
复制代码
回复

使用道具 举报

🔗
 楼主| wjf1990 2015-12-1 23:49:17 | 只看该作者
全局:
bobzhang2004 发表于 2015-12-1 13:04
写了下max island perimeter的代码,电面考这个代码量真多啊。楼主代码中得输出应该是12? 欢迎指教。

应该是没错  我晚上回家看看
回复

使用道具 举报

🔗
reality 2015-12-2 00:34:02 | 只看该作者
全局:
第二题:merge 2 unsorted array(in-place) 请问这个怎么in place做呢 谢谢
回复

使用道具 举报

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

使用道具 举报

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

评分

参与人数 1大米 +5 收起 理由
reality + 5 感谢分享!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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