📣 独立日限时特惠: VIP通行证立减$68
回复: 14
跳转到指定楼层
上一主题 下一主题
收起左侧

Snapcaht 7.19新鲜电面

全局:

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

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

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

x
是一道面经题:地里出现过,俗称有墙找路:
题目是一个矩阵里某些位置有墙
您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
晋级了!求加大米啊!!!



评分

参与人数 8大米 +31 收起 理由
ericlee27 + 1 感谢分享!
wcongying + 10 N/A
lookbackinanger + 3 感谢分享!
谎言之躯 + 1 感谢分享!
何打发123 + 5 感谢分享!

查看全部评分


上一篇:Uber HR/Recruiter technical screening
下一篇:Samsung 三星onsite 6.2 面经
全局:
自己写了一个 不知道对不对~各位求指正~
  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.                
  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);
  15.                
  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;
  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;
  30.                         //return;
  31.                 }
  32.                
  33.                 if(matrix[x][y] == 5){
  34.                         //cost[x][y] = Math.min(cost[x][y], cur + 1);
  35.                         cost[x][y] = cur + 1;
  36.                 }else{
  37.                         //cost[x][y] = Math.min(cost[x][y], cur);
  38.                         cost[x][y] = cur;
  39.                 }
  40.         //        System.out.println(x + " " + y + " " + cost[x][y]);
  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.                         dfs2(matrix, cost, visited, x + surroundx[i], y + surroundy[i], cost[x][y]);
  46.                 }
  47.                 visited[x][y] = false;
  48.                
  49.         }
  50.        
  51.        
  52.         public static void main(String[] args) {
  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},
  59.                   {9, 5, 5, 0, 0, 0}
  60.                 };
  61.                
  62.                 System.out.println(money);
  63.         }
  64. }
复制代码
回复

使用道具 举报

全局:
谎言之躯 发表于 2016-7-22 06:22
我觉得输出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);
  10.                 }
  11.                
  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.         private void dfs3(int[][] matrix, int[][] cost, boolean[][] visited, int x, int y, int cur, ArrayList<Point> temp){
  21.                 if(x < 0 ||x >= matrix.length || y < 0 || y >= matrix[0].length || visited[x][y] == true) return;
  22.                
  23.                 if(cur >= cost[x][y]) return;
  24.                
  25.                 visited[x][y] = true;
  26.                 cost[x][y] = cur;
  27.                 temp.add(new Point(x, y));
  28.                
  29.                 if(matrix[x][y] == 9){
  30.                         //System.out.println(money);
  31.                         //money = Math.min(cur, money);
  32.                         money = cur;
  33.                         path = new ArrayList<Point>(temp);
  34.                 }else{
  35.                          if(matrix[x][y] == 5){
  36.                         //cost[x][y] = Math.min(cost[x][y], cur + 1);
  37.                                 cost[x][y] = cur + 1;
  38.                         }
  39.         //        System.out.println(x + " " + y + " " + cost[x][y]);
  40.                         int[] surroundx = new int[]{-1, 1, 0, 0};
  41.                         int[] surroundy = new int[]{0, 0, -1, 1};
  42.                
  43.                         for(int i = 0; i < 4; i++){
  44.                                 dfs3(matrix, cost, visited, x + surroundx[i], y + surroundy[i], cost[x][y], temp);
  45.                         }
  46.                 }
  47.                 visited[x][y] = false;
  48.                 temp.remove(temp.size() - 1);
  49.                
  50.         }
复制代码
回复

使用道具 举报

推荐
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,不然就更新
回复

使用道具 举报

🔗
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
楼主是找人内推的吗,还是自己投的?

推的,推的,推的,推的,推的,推的
回复

使用道具 举报

🔗
谎言之躯 2016-7-22 02:09:34 | 只看该作者
全局:
何打发123 发表于 2016-7-22 00:45
自己写了一个 不知道对不对~各位求指正~

if(cur > cost[x][y]) return;
这一句应该改为if(cur >= cost[x][y]) return;

因为如果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;
这一句应该改为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
推的,推的,推的,推的,推的,推的

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

使用道具 举报

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

本版积分规则

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