楼主: u-r-the-one
跳转到指定楼层
上一主题 下一主题
收起左侧

Snapchat电面面经

🔗
 楼主| u-r-the-one 2016-4-20 08:26:51 | 只看该作者
全局:
wangmengcathy 发表于 2016-4-19 18:27
求问楼主这题和number of islands的区别?

Number of island 1 是必须要连在一起在算一组 但是这个比如1和2,1和5是朋友 这样他们是一组的 我觉得如果你用BFS的话 应该就不行 因为1和2连着 但是中间是0就走不到5 但是如果用union find的话 就是一样的方法了 没什么差别
回复

使用道具 举报

🔗
 楼主| u-r-the-one 2016-4-20 08:31:01 | 只看该作者
全局:
谎言之躯 发表于 2016-4-15 00:22
通过bfs/dfs是不是也能做出来? 参考这道题https://leetcode.com/problems/number-of-islands/

比如这种matrix
[[1, 0, 1],
[0, 1, 0],
[1, 0, 1]]
这样我觉得用BFS应该就不行吧
回复

使用道具 举报

🔗
wangmengcathy 2016-4-20 10:14:44 | 只看该作者
全局:
u-r-the-one 发表于 2016-4-20 08:26
Number of island 1 是必须要连在一起在算一组 但是这个比如1和2,1和5是朋友 这样他们是一组的 我觉得如 ...

多谢楼主解释,那这道题确实可用dfs或者union find,bfs的话不够intuitive。自己写了个UF版本的。
  1. class Untitled {
  2.         public static void main (String [] args) {
  3.                 int[][] friends = {{1,0,1}, {0, 1, 0}, {1, 0, 1}};
  4.                 System.out.println(groupFriends(friends));
  5.         }
  6.        
  7.         public static int groupFriends(int[][] matrix) {
  8.                 UnionFind uf = new UnionFind(matrix);
  9.                 int m = matrix.length;
  10.                 int n = matrix[0].length;
  11.                 for(int i = 0; i < m; i++) {
  12.                         for(int j = 0; j < n; j++) {
  13.                                 if(matrix[i][j] == 1) {
  14.                                         uf.union(i, j);
  15.                                 }
  16.                         }
  17.                 }
  18.                 return uf.count;
  19.         }
  20. }

  21. class UnionFind {
  22.         public int count = 0;
  23.         private int[] id = null;
  24.         public UnionFind(int[][] matrix) {
  25.                 count = matrix.length;
  26.                 id = new int[count];
  27.                 for(int i = 0; i < id.length; i++) id[i] = i;
  28.         }
  29.        
  30.         public int find(int p) {
  31.                 while(p != id[p]) {
  32.                         p = id[p];
  33.                 }
  34.                 return p;
  35.         }
  36.        
  37.         public boolean union(int p, int q) {
  38.                 p = find(p);
  39.                 q = find(q);
  40.                 if(p == q) return false;
  41.                 id[p] = q;
  42.                 count--;
  43.                 return true;
  44.         }
  45. }
复制代码
回复

使用道具 举报

🔗
ninacc 2016-4-21 09:25:31 | 只看该作者
全局:
这题BFS,DFS都可以做,和number of Island 1的区别在于,比如对于friend i, 不是对上下左右四个点做进一步的搜索,而是对i的所在的那一行进行搜索。当然,要加visited set进行判断已经搜过的friend 例如dfs:

  1.     public static void dfs(int[][] matrix, HashSet<Integer> visited, int curr){
  2.         visited.add(curr);
  3.         int n = matrix.length;
  4.         for(int i=0;i<n;i++){
  5.             if(matrix[curr][i]==1 && i!=curr && !visited.contains(i)){
  6.                 dfs(matrix,visited,i);
  7.             }
  8.         }
  9.     }
复制代码
回复

使用道具 举报

🔗
ninacc 2016-4-21 09:27:38 | 只看该作者
全局:
能用DFS, BFS就也是可以的。
  1.     public void bfs(int[][] matrix, HashSet<Integer> visisted, int k){
  2.         visited.add(k);
  3.         Queue<Integer> q = new LinkedList<>();
  4.         q.offer(k);
  5.         int n = matrix.length;
  6.         
  7.         while(!q.isEmpty()){
  8.             int curr = q.poll();
  9.             for(int i=0;i<n;i++){
  10.                 if(int[curr][i]==1 && i!=curr && !visited.contains(i)){
  11.                     q.offer(i);
  12.                     visited.add(i);
  13.                 }
  14.             }
  15.         }
  16.     }
复制代码
回复

使用道具 举报

🔗
ykwwind 2016-4-21 09:32:25 | 只看该作者
全局:
u-r-the-one 发表于 2016-4-20 08:31
比如这种matrix
[[1, 0, 1],
[0, 1, 0],

把[n][n]忽略了就ok了....
回复

使用道具 举报

🔗
kemeng1314 2016-5-6 12:21:25 | 只看该作者
全局:
楼主您好,我是昨天国人电面string compare,但目前还没有收到消息,最后有小bug没跳出来。不知一般要等多久有下一步消息。
回复

使用道具 举报

🔗
 楼主| u-r-the-one 2016-5-6 12:23:54 | 只看该作者
全局:
kemeng1314 发表于 2016-5-5 23:21
楼主您好,我是昨天国人电面string compare,但目前还没有收到消息,最后有小bug没跳出来。不知一般要等多 ...

我是周五面的 周一给的onsite消息
回复

使用道具 举报

🔗
kemeng1314 2016-5-6 12:25:47 | 只看该作者
全局:
u-r-the-one 发表于 2016-5-6 12:23
我是周五面的 周一给的onsite消息

有bug的话就很难有next step了吧,但思路说的特别多。不知道会不会给个加面的机会。
回复

使用道具 举报

🔗
 楼主| u-r-the-one 2016-5-6 12:38:16 | 只看该作者
全局:
kemeng1314 发表于 2016-5-5 23:25
有bug的话就很难有next step了吧,但思路说的特别多。不知道会不会给个加面的机会。

这也不好说 我有同学就是被加面了 他们应该还是看中你思路怎么样 他给你提示了的话看你反应快不快 祝你好运!
回复

使用道具 举报

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

本版积分规则

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