📣 Back to School开学季 - VIP通行证5折优惠!蓝莓、Offer多多同步优惠
123
返回列表 发新帖
楼主: Dilemma24
跳转到指定楼层
上一主题 下一主题
收起左侧

脸家电面 2h前

全局:
楼主你去onsite了吗 我也刚过了电面,onsite有点紧张呢

评分

参与人数 1大米 +5 收起 理由
Spinoza + 5 欢迎来一亩三分地论坛!

查看全部评分

回复

使用道具 举报

🔗
 楼主| Dilemma24 2018-8-31 00:16:56 | 只看该作者
全局:
屌屌的心经 发表于 2018-8-29 00:43
楼主你去onsite了吗 我也刚过了电面,onsite有点紧张呢

没呢 一起努力准备吧
回复

使用道具 举报

🔗
 楼主| Dilemma24 2018-8-31 00:17:28 | 只看该作者
全局:
Shp2500 发表于 2018-8-28 23:52
问下LZ,电面过了之后多久通知你去onsite的啊?

隔了1-2天 没记错的话隔了一天第二题下午收到邮件的

评分

参与人数 1大米 +3 收起 理由
Shp2500 + 3 很有用的信息!

查看全部评分

回复

使用道具 举报

全局:
好奇一下,这个题目楼主为什么要用bfs做呢?
如果仅仅是需要1所代表的岛屿的数目,然后去掉,上下左右都为1的岛屿数目,
貌似暴力扫一遍就可以吧。
还有什么其他的条件吗?
回复

使用道具 举报

🔗
JerryYang1120 2018-8-31 07:17:23 | 只看该作者
全局:
第二题可以用并查集找岛屿,然后构建hash map,key为parent,value为坐标集,最后数坐标集合的边长
回复

使用道具 举报

🔗
smileyvenice 2018-8-31 13:08:18 | 只看该作者
全局:
楼主说的题意很清晰,就是BFS的时候注意看看每个cell有没有被4个1包围即可,C++代码测了一下没问题:
  1. #include <iostream>
  2. #include <vector>
  3. #include <queue>

  4. using namespace std;

  5. static const vector<int> di {0, 0, 1, -1};
  6. static const vector<int> dj {1, -1, 0, 0};

  7. bool inBound(const int i, const int j, const size_t m, const size_t n) {
  8.     return (0 <= i) && (i < m) && (0 <= j) && (j < n);   
  9. }

  10. void bfs(vector<vector<int>> &grid, int i, int j, const size_t m, const size_t n,
  11.          vector<int> &result) {
  12.     queue<pair<int, int>> q;
  13.     q.push({i, j});
  14.     // mark this cell visited
  15.     grid[i][j] = -1;
  16.    
  17.     int perimeter = 0;
  18.     while (!q.empty()) {
  19.         pair<int, int> curr = q.front();
  20.         q.pop();
  21.         int count = 0;
  22.         for (int k = 0; k < 4; ++k) {
  23.             int ni = curr.first + di[k];
  24.             int nj = curr.second + dj[k];
  25.             if (inBound(ni, nj, m, n)) {
  26.                 if (grid[ni][nj] == 0) continue;
  27.                 if (grid[ni][nj] == 1) {
  28.                     q.push({ni, nj});
  29.                     grid[ni][nj] = -1;
  30.                 }
  31.                 count++;
  32.             }
  33.         }
  34.         if (count != 4) perimeter++;
  35.     }
  36.     result.push_back(perimeter);
  37. }

  38. vector<int> computePerimeter(vector<vector<int>> &grid) {
  39.     if (grid.empty() || grid[0].empty()) {
  40.         return {};
  41.     }
  42.    
  43.     const size_t m = grid.size(), n = grid[0].size();
  44.     vector<int> result;
  45.     for (int i = 0; i < m; ++i) {
  46.         for (int j = 0; j < n; ++j) {
  47.             if (grid[i][j] == 1) {
  48.                 bfs(grid, i, j, m, n, result);
  49.             }
  50.         }
  51.     }
  52.     return result;
  53. }

  54. int main() {
  55.     vector<vector<int>> grid {{1, 0, 0, 1, 1, 1},
  56.                               {1, 0, 0, 1, 1, 1},
  57.                               {0, 0, 0, 0, 1, 1}};
  58.    
  59.     vector<int> result = computePerimeter(grid);
  60.     return 0;
  61. }
复制代码


回复

使用道具 举报

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

使用道具 举报

全局:
smileyvenice 发表于 2018-8-31 13:10
我觉得返回的结果可能是每个岛的周长分开的,比如楼主的例子返回值就是[2, 7]。这样的话,就需要用bfs把 ...

哦哦,这样的话,感觉DFS还是BFS差不多的样子?
就是为了遍历的过程中把相邻岛屿干掉。
回复

使用道具 举报

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

本版积分规则

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