一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

扫码关注一亩三分地公众号
查看: 1629|回复: 14
收起左侧

Snapcaht 7.19新鲜电面

[复制链接] |试试Instant~ |关注本帖
liuqi627 发表于 2016-7-21 15:48:49 | 显示全部楼层 |阅读模式

2016(7-9月) 码农类 硕士 全职@Snapchat - 内推 - 技术电面 |Passfresh grad应届毕业生

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

您需要 登录 才可以下载或查看,没有帐号?获取更多干货,去instant注册!

x
是一道面经题:地里出现过,俗称有墙找路:
题目是一个矩阵里某些位置有墙,给一个出发点及目的地,求最短距离。follwup是现在墙可以打破,没打破一个cost为1,求cost最小的路线。


求加大米!还有5个积分就能晋级了!求加大米啊!!!. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
. visit 1point3acres.com for more.


评分

8

查看全部评分

StellaJiang 发表于 2016-7-21 16:37:26 | 显示全部楼层
楼主是找人内推的吗,还是自己投的?
回复 支持 反对

使用道具 举报

wtcupup 发表于 2016-7-21 16:39:29 | 显示全部楼层
用BFS 然后Follow up用DP ?
回复 支持 反对

使用道具 举报

 楼主| liuqi627 发表于 2016-7-21 16:56:13 | 显示全部楼层
StellaJiang 发表于 2016-7-21 16:37
楼主是找人内推的吗,还是自己投的?
. Waral 鍗氬鏈夋洿澶氭枃绔,
推的,推的,推的,推的,推的,推的
回复 支持 反对

使用道具 举报

何打发123 发表于 2016-7-22 00:45:48 | 显示全部楼层
自己写了一个 不知道对不对~各位求指正~
  1. int money = Integer.MAX_VALUE;
  2.         public int minCost(int[][] matrix){
  3.                 if(matrix == null || matrix.length == 0) return -1;
  4.                
  5.                 int[][] cost = new int[matrix.length][matrix[0].length];
  6.                 for(int i = 0; i < cost.length; i++){
  7.                         Arrays.fill(cost[i], Integer.MAX_VALUE);
  8.                 }
  9.                 . from: 1point3acres.com/bbs
  10.                 cost[0][0] = 0;
  11.                
  12.                 boolean[][] visited = new boolean[matrix.length][matrix[0].length];
  13.                
  14.                 dfs2(matrix, cost, visited, 0, 0, 0);. visit 1point3acres.com for more.
  15.                
    . from: 1point3acres.com/bbs
  16.                 return money;. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴

  17.         }. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
  18.         .鐣欏璁哄潧-涓浜-涓夊垎鍦
  19.         private void dfs2(int[][] matrix, int[][] cost, boolean[][] visited, int x, int y, int cur){
  20.                 if(x < 0 ||x >= matrix.length || y < 0 || y >= matrix[0].length || visited[x][y] == true) return;.1point3acres缃
  21.                
  22.                 if(cur > cost[x][y]) return;
  23.                 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
  24.                 visited[x][y] = true;
  25.                
  26.                 if(matrix[x][y] == 9){
  27.                         //System.out.println(money);
  28.                         //money = Math.min(cur, money);
  29.                         money = cur;-google 1point3acres
  30.                         //return;
  31.                 }
  32.                
  33.                 if(matrix[x][y] == 5){. From 1point 3acres bbs
  34.                         //cost[x][y] = Math.min(cost[x][y], cur + 1);
  35.                         cost[x][y] = cur + 1;
  36.                 }else{. 1point3acres.com/bbs
  37.                         //cost[x][y] = Math.min(cost[x][y], cur);
  38.                         cost[x][y] = cur;
  39.                 }. 鍥磋鎴戜滑@1point 3 acres
  40.         //        System.out.println(x + " " + y + " " + cost[x][y]);.1point3acres缃
  41.                 int[] surroundx = new int[]{-1, 1, 0, 0};
  42.                 int[] surroundy = new int[]{0, 0, -1, 1};
  43.                
  44.                 for(int i = 0; i < 4; i++){.1point3acres缃
  45.                         dfs2(matrix, cost, visited, x + surroundx[i], y + surroundy[i], cost[x][y]);
  46.                 }
  47.                 visited[x][y] = false;.1point3acres缃
  48.                 . Waral 鍗氬鏈夋洿澶氭枃绔,
  49.         }. 鍥磋鎴戜滑@1point 3 acres
  50.        
  51.        
  52.         public static void main(String[] args) {
    .鏈枃鍘熷垱鑷1point3acres璁哄潧
  53.                 Solution s = new Solution();
  54.                 int[][] m = {
  55.                   {1, 0, 5, 5, 5, 0},
  56.                   {5, 0, 0, 5, 5, 0},
  57.                   {5, 5, 0, 0, 0, 0},
  58.                   {5, 5, 0, 0, 5, 0},. 1point 3acres 璁哄潧
  59.                   {9, 5, 5, 0, 0, 0}
  60.                 };. 1point 3acres 璁哄潧
  61.                
  62.                 System.out.println(money);
  63.         }
  64. }
复制代码
回复 支持 反对

使用道具 举报

谎言之躯 发表于 2016-7-22 02:09:34 | 显示全部楼层
何打发123 发表于 2016-7-22 00:45
自己写了一个 不知道对不对~各位求指正~

if(cur > cost[x][y]) return;
这一句应该改为if(cur >= cost[x][y]) return;. From 1point 3acres bbs

因为如果cur==cost[x][y]、同时matrix[x][y] == 5的话,这样cost[x][y]就会被更新为更大的值了。
回复 支持 反对

使用道具 举报

谎言之躯 发表于 2016-7-22 02:10:13 | 显示全部楼层
follow up是要求把整条路线输出吗?
回复 支持 反对

使用道具 举报

何打发123 发表于 2016-7-22 03:28:52 | 显示全部楼层
谎言之躯 发表于 2016-7-22 02:09
if(cur > cost[x][y]) return;. Waral 鍗氬鏈夋洿澶氭枃绔,
这一句应该改为if(cur >= cost[x][y]) return;

对的0.0 我没考虑到0.0  

要是要输出path 就要dp 每一个点dp再每个点带一个arrayList??  leetcode上有木有类似的题想练习一下 感觉写起来有点烦啊 T T

回复 支持 反对

使用道具 举报

谎言之躯 发表于 2016-7-22 06:22:05 | 显示全部楼层
何打发123 发表于 2016-7-22 03:28
对的0.0 我没考虑到0.0  

要是要输出path 就要dp 每一个点dp再每个点带一个arrayList??  lee ...

我觉得输出path的话,不用DP,用backtracking就行,DFS时每次访问一个点,就把当前点加入一个记录路径的变量,这个点访问结束时,也就是代码的visited[x][y] = false后面,把这个点从路径弹出。更新money变量时,就可以把路径存下来。
回复 支持 反对

使用道具 举报

pupuchan1116 发表于 2016-7-22 06:30:42 | 显示全部楼层
liuqi627 发表于 2016-7-21 16:56
推的,推的,推的,推的,推的,推的

楼主如果能推的话 可否留一个您的邮箱 我想把简历发给您 谢谢~
回复 支持 反对

使用道具 举报

何打发123 发表于 2016-7-22 08:27:49 | 显示全部楼层
谎言之躯 发表于 2016-7-22 06:22. 1point 3acres 璁哄潧
我觉得输出path的话,不用DP,用backtracking就行,DFS时每次访问一个点,就把当前点加入一个记录路径的 ...

按照您的指导  俺又写了一个 但是觉得dp能加快速度 免去了不必要的dfs >.< 再次求指导~~ 哈哈 您约得什么时候的面试呀?
  1. int money = Integer.MAX_VALUE;
  2.         ArrayList<Point> path = new ArrayList<Point>();
  3.        
  4.         public ArrayList<Point> minCostPath(int[][] matrix){
  5.                 if(matrix == null || matrix.length == 0) return path;
  6.                
  7.                 int[][] cost = new int[matrix.length][matrix[0].length];
  8.                 for(int i = 0; i < cost.length; i++){
  9.                         Arrays.fill(cost[i], Integer.MAX_VALUE);. visit 1point3acres.com for more.
  10.                 }
  11.                 . 鍥磋鎴戜滑@1point 3 acres
  12.                
  13.                 boolean[][] visited = new boolean[matrix.length][matrix[0].length];
  14.                 ArrayList<Point> temp = new ArrayList<Point>();
  15.                 dfs3(matrix, cost, visited, 0, 0, 0, temp);
  16.                
  17.                 return path;
  18. . 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  19.         }
  20.        
  21.         private void dfs3(int[][] matrix, int[][] cost, boolean[][] visited, int x, int y, int cur, ArrayList<Point> temp){
  22.                 if(x < 0 ||x >= matrix.length || y < 0 || y >= matrix[0].length || visited[x][y] == true) return;.鐣欏璁哄潧-涓浜-涓夊垎鍦
  23.                
  24.                 if(cur >= cost[x][y]) return;
  25.                
  26.                 visited[x][y] = true;
  27.                 cost[x][y] = cur;
  28.                 temp.add(new Point(x, y));
  29.                 . 1point 3acres 璁哄潧
  30.                 if(matrix[x][y] == 9){
  31.                         //System.out.println(money);
  32.                         //money = Math.min(cur, money);
  33.                         money = cur;
  34.                         path = new ArrayList<Point>(temp);
  35.                 }else{
  36.                          if(matrix[x][y] == 5){.鏈枃鍘熷垱鑷1point3acres璁哄潧
  37.                         //cost[x][y] = Math.min(cost[x][y], cur + 1);. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
  38.                                 cost[x][y] = cur + 1;
  39.                         }
  40.         //        System.out.println(x + " " + y + " " + cost[x][y]);. 1point3acres.com/bbs
  41.                         int[] surroundx = new int[]{-1, 1, 0, 0};
  42.                         int[] surroundy = new int[]{0, 0, -1, 1};
  43.                
  44.                         for(int i = 0; i < 4; i++){
  45.                                 dfs3(matrix, cost, visited, x + surroundx[i], y + surroundy[i], cost[x][y], temp);
  46.                         }
  47.                 }
  48.                 visited[x][y] = false;
  49.                 temp.remove(temp.size() - 1);
  50.                
  51.         }. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
复制代码
回复 支持 反对

使用道具 举报

lookbackinanger 发表于 2016-9-8 08:44:48 | 显示全部楼层
何打发123 发表于 2016-7-22 08:27
按照您的指导  俺又写了一个 但是觉得dp能加快速度 免去了不必要的dfs >.< 再次求指导~~ 哈哈 您约得什么 ...
.鐣欏璁哄潧-涓浜-涓夊垎鍦
这个visited数组是不是没有必要加? 直接用cost矩阵不就行了?
回复 支持 反对

使用道具 举报

liurudahai 发表于 2016-11-7 09:35:42 | 显示全部楼层
何打发123 发表于 2016-7-22 00:45
自己写了一个 不知道对不对~各位求指正~

matrix = 9和matrix = 5这些都是怎么来的?
回复 支持 反对

使用道具 举报

liurudahai 发表于 2016-11-7 09:45:48 | 显示全部楼层
何打发123 发表于 2016-7-22 08:27
按照您的指导  俺又写了一个 但是觉得dp能加快速度 免去了不必要的dfs >.< 再次求指导~~ 哈哈 您约得什么 ...
. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
感觉还是有问题,你访问过一个节点,就把他的VISITED设置成TRUE了,然后同时更新COST,下一次再访问,VISITED 已经是TRUE了,直接就RETURN了,那你那个更新COST的代码根本不会访问了吧,感觉VISITED没有必要,直接利用COST那个数组来控制,如果现在的COST(CUR)大于等于DP的值,就RETURN,不然就更新
回复 支持 反对

使用道具 举报

何打发123 发表于 2016-11-7 10:28:37 | 显示全部楼层
liurudahai 发表于 2016-11-7 09:45
感觉还是有问题,你访问过一个节点,就把他的VISITED设置成TRUE了,然后同时更新COST,下一次再访问,VIS ...

sorry..太久了实在不记得当时候怎么想的了。。  T T  你明白就好啦~
回复 支持 反对

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2016-12-10 17:23

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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