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

Snapchat电面

🔗
xietao0221 2016-9-28 12:18:16 | 只看该作者
全局:
  1. public class Solution {
  2.     public List<List<Integer>> groupOfFriend(int[][] matrix) {
  3.         if(matrix == null || matrix.length == 0) return new ArrayList<>();

  4.         List<List<Integer>> res = new ArrayList<>();
  5.         int[][] dirs = new int[][]{{0,1},{0,-1},{1,0},{-1,0}};

  6.         for(int i = 0; i < matrix.length; i++) {
  7.             for(int j = i; j < matrix[0].length; j++) {
  8.                 Set<Integer> tmpRes = new HashSet<>();
  9.                 if(j >= i && matrix[i][j] == 1) {
  10.                     tmpRes.add(i);
  11.                     matrix[i][j] = 0;
  12.                     dfs(matrix, i, j, tmpRes, dirs);
  13.                     res.add(new ArrayList<>(tmpRes));
  14.                 }
  15.             }
  16.         }
  17.         return res;
  18.     }

  19.     private void dfs(int[][] matrix, int i, int j, Set<Integer> tmpRes, int[][] dirs) {
  20.         tmpRes.add(j);
  21.         matrix[i][j] = 0;
  22.         for(int[] dir: dirs) {
  23.             int newRow = i + dir[0], newCol = j + dir[1];
  24.             if(newRow >= 0 && newCol >= 0 && newCol < matrix[0].length && newRow < matrix.length &&
  25.                     newCol >= newRow && matrix[newRow][newCol] == 1) {
  26.                 dfs(matrix, newRow, newCol, tmpRes, dirs);
  27.             }
  28.         }
  29.     }
  30. }
复制代码
回复

使用道具 举报

🔗
超分 2016-9-28 13:27:51 | 只看该作者
全局:
楼主,输出为什么是2?1认识0,1认识2 —> 0,1,2算一个group?那输出不就应该是1了吗?
回复

使用道具 举报

🔗
 楼主| Lynnklj 2016-9-29 00:38:08 | 只看该作者
全局:
超分 发表于 2016-9-28 13:27
楼主,输出为什么是2?1认识0,1认识2 —> 0,1,2算一个group?那输出不就应该是1了吗?

一共有三个人啊:0,1,2,3.最后一个人谁也不认识,所以自己独立算一个group~~

补充内容 (2016-9-29 00:40):
一共是四个人哈。最后一个自己一个group
回复

使用道具 举报

🔗
 楼主| Lynnklj 2016-9-29 00:39:26 | 只看该作者
全局:
不对,一共四个人~~。然后最后一个人谁也不认识,所以自己成一个group。
回复

使用道具 举报

全局:

这个应该不是上下左右搜吧? 当遇到一个1以后,应该一整行,一整列得去搜吧?
回复

使用道具 举报

全局:
Lynnklj 发表于 2016-9-29 00:39
不对,一共四个人~~。然后最后一个人谁也不认识,所以自己成一个group。

多谢楼主分享。 请问应该就是八楼分享的代码那样的吧?
回复

使用道具 举报

🔗
 楼主| Lynnklj 2016-9-29 01:34:58 | 只看该作者
全局:
小A要当码农 发表于 2016-9-29 00:50
多谢楼主分享。 请问应该就是八楼分享的代码那样的吧?

嗯,其实BFS或者DFS都可以~
回复

使用道具 举报

🔗
linweihua0 2016-9-29 06:55:09 | 只看该作者
全局:
Lynnklj 发表于 2016-9-29 01:34
嗯,其实BFS或者DFS都可以~

所以肯定是symmetric matrix吗?

一个group of friends的定义就是 这个group里的任何人必须被至少一个group里的人认识吗?
回复

使用道具 举报

🔗
 楼主| Lynnklj 2016-9-29 07:18:01 | 只看该作者
全局:
linweihua0 发表于 2016-9-29 06:55
所以肯定是symmetric matrix吗?

一个group of friends的定义就是 这个group里的任何人必须被至少一个 ...

嗯,是的是的。一定是对称的~~
回复

使用道具 举报

🔗
hjx447297354 2016-10-19 10:01:15 | 只看该作者
全局:

这道题好像和number of island不太一样把,他不是算所有1连成的区域,每个1代表的是i knows j。比如:
{1,1,0,1}
{1,1,1,0}
{0,1,1,0}
{1,0,0,1}
返回的应该是1,按照你的代码,返回的是4了
回复

使用道具 举报

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

本版积分规则

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