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

亚麻面经题求解

全局:

2019(4-6月) 码农类General 本科 全职@amazon - 网上海投 - 在线笔试  | | Other | 在职跳槽
题目如下图:




请教地里的大牛们,这题该
您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限 或 查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
烦版主把此帖移到高频题板块。。。

本帖子中包含更多资源

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

x

评分

参与人数 2大米 +33 收起 理由
匿名用户-EGQ80 + 30
financeFree + 3 很有用的信息!

查看全部评分


上一篇:venmo前端裸面
下一篇:新鲜出炉 亚麻OA
🔗
mike915 2019-6-26 02:38:13 | 只看该作者
全局:
感觉像topological search
回复

使用道具 举报

🔗
chengw 2019-6-26 04:23:22 来自APP | 只看该作者
全局:
  1. // Amazon OA
  2. // fullfil the maximum number of moving requests
  3. // ["alex", 1, 2]  --- alex wants to move from blg-1 to blg-2
  4. // ["ben", 2, 1]   --- ben wants to move from blg-2 to blg-1
  5. typedef map<int, vector<pair<int, string>>> t_g;
  6. void dfs(t_g& g, pair<int, string>& e, int target, unordered_set<string>& visited, vector<pair<int, string>>& cur, vector<pair<int, string>>& longest) {
  7.     if (visited.find(to_string(e.first) + e.second) != visited.end()) return;

  8.     cur.push_back(e), visited.insert(to_string(e.first) + e.second);
  9.     if (e.first == target) {
  10.         if (cur.size() > longest.size()) longest = cur;     // keep the longest, will mark visited later
  11.     } else {
  12.         for (auto& n : g[e.first]) {
  13.             dfs(g, n, target, visited, cur, longest);       // brute-froce try every cycle
  14.         }
  15.     }
  16.     cur.pop_back(), visited.erase(to_string(e.first) + e.second);
  17. }

  18. vector<vector<string>> maxMoivingRequest(vector<vector<string>>& requests) {
  19.     t_g g;
  20.     for (auto& r : requests) g[stoi(r[1])].push_back({stoi(r[2]), r[0]});
  21.    
  22.     vector<vector<string>> ans;
  23.     unordered_set<string> visited;
  24.     for (auto& kv : g) {
  25.         for (auto& e : kv.second) {
  26.             auto start = to_string(e.first) + e.second;
  27.             if (visited.find(start) != visited.end()) continue;

  28.             vector<pair<int, string>> path, longest;
  29.             dfs(g, e, kv.first, visited, path, longest);
  30.             if (!longest.empty()) {
  31.                 ans.push_back(vector<string>{});
  32.                 for (auto& e : longest) {
  33.                     visited.insert(to_string(e.first) + e.second), ans.back().push_back(e.second);
  34.                 }
  35.             }
  36.         }
  37.     }
  38.     return ans;
  39. }
复制代码


这题啰嗦的地方是找出最长的环,贴一个暴力DFS的解法O(VE)time,没有仔细测试,请大伙指正。

补充内容 (2019-6-29 12:00):
发现我这个方法有一个case没有考虑到,忽略吧
回复

使用道具 举报

🔗
woridage1 2019-7-21 00:29:50 | 只看该作者
全局:
建图,然后dfs每次找最大的环,找到一个环以后就把人名用set标记出来。从剩下的继续找环,直到所有成员访问过至少一遍。
两个set,一个用来标记人名,每次dfs以后进行更新,另一个用来标记建筑物,放在dfs的函数里使用
回复

使用道具 举报

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

本版积分规则

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