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

热带雨林在线作业 Amazon OA

全局:

2019(10-12月) 码农类General 硕士 全职@amazon - 猎头 - 在线笔试  | | Other | 在职跳槽

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

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

x
本帖最后由 Lambsea 于 2020-1-7 04:34 编辑

运气比较好拿到了两个最难的oa题

第一题
Product Suggestions
Runtime: 11 ms, faster than 92.26% of Java online submissions for Search Suggestions System.

  1. class Solution {
  2.     public List<List<String>> suggestedProducts(String[] products, String searchWord) {
  3.         List<List<String>> ans = new ArrayList<>();
  4.         
  5.         if (products.length == 0 || searchWord.length() == 0) {
  6.             return ans;
  7.         }
  8.         
  9.         Arrays.sort(products);
  10.         char[] arr = searchWord.toCharArray();
  11.         
  12.         // first
  13.         List<String> lastMatched = new ArrayList<>();
  14.         for (String str : products) {
  15.             if (str.charAt(0) == arr[0]) {
  16.                 lastMatched.add(str);
  17.             }
  18.         }
  19.         ans.add(getFirstThree(lastMatched));
  20.         
  21.         //O(m)
  22.         for (int i = 1; i < arr.length; i++) {
  23.             List<String> matched = getMatchedStrings(lastMatched, i, arr[i]); // O(n)
  24.             lastMatched = matched;
  25.             ans.add(getFirstThree(matched));
  26.         }
  27.         
  28.         return ans; //O(m*n)  m 是搜索字符串的长度 n是总共的products个数
  29.     }
  30.    
  31.     private List<String> getFirstThree(List<String> products) { //O(3)
  32.         List<String> ans = new ArrayList<>();
  33.         for (int i = 0; i < 3 && i < products.size(); i++) {
  34.             ans.add(products.get(i));
  35.         }
  36.         return ans;
  37.     }
  38.    
  39.     //O(n)
  40.     private List<String> getMatchedStrings(List<String> products, int index, char c) {
  41.         List<String> ans = new ArrayList<>();
  42.         for (String str : products) {
  43.             // 这里默认如果搜索字串长于当前产品名字, 那么我们就认为没有产品匹配
  44.             if (index < str.length() && str.charAt(index) == c) {
  45.                 ans.add(str);
  46.             }
  47.         }
  48.         return ans;
  49.     }
  50. }
复制代码



第二题
Critical Routers[/i]
无向图里找相连点, 我这里的答案是看过Tarjan教程之后写的

正常人的想法应该是用bfs / dfs 把相邻点去掉一个一个试能不能联通

You are given a
您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies


Input: numNodes = 7, numEdges = 7, edges = [[0, 1], [0, 2], [1, 3], [2, 3], [2, 5], [5, 6], [3, 4]]

  1. public class CriticalRouters {
  2.     public static void main(String[] args) {
  3.         /**
  4.          * numNodes = 7, numEdges = 7, edges = [[0, 1], [0, 2], [1, 3], [2, 3], [2, 5], [5, 6], [3, 4]]
  5.          */
  6.         int numNodes = 7, numEdges = 7;
  7.         List<List<Integer>> edges = StringTransformHelper.to2DList("[[0, 1], [0, 2], [1, 3], [2, 3], [2, 5], [5, 6], [3, 4]]");
  8.         /**
  9.          * out put [2, 3, 5]
  10.          */
  11.         CriticalRouters cr = new CriticalRouters();

  12.         List<Integer> ans = new ArrayList<>();
  13.         int[] ids = new int[numNodes];
  14.         int[] lowLink = new int[numNodes];
  15.         int[] outGoingEdgeCount = new int[numNodes];
  16.         boolean[] visited = new boolean[numNodes];

  17.         List<Integer>[] graph = cr.getGraph(numNodes, edges);
  18.         int startNode = 5;
  19.         cr.getCriticalRouters(ans, ids, lowLink, outGoingEdgeCount, visited, -1, startNode, 0, startNode, graph);
  20.         System.out.println(ans);

  21.     }

  22.     private void getCriticalRouters(List<Integer> ans,
  23.                                     int[] ids,
  24.                                     int[] lowLink,
  25.                                     int[] outGoingEdgeCount,
  26.                                     boolean[] visited,
  27.                                     int prevNode,
  28.                                     int currNode,
  29.                                     Integer currentId,
  30.                                     int startNode,
  31.                                     List<Integer>[] graph) {

  32.         ids[currNode] = lowLink[currNode] = currentId++;
  33.         visited[currNode] = true;
  34.         if (prevNode == startNode) {
  35.             outGoingEdgeCount[prevNode]++;
  36.         }

  37.         for (Integer neib : graph[currNode]) {
  38.             if (neib == prevNode) {
  39.                 continue;    // ensure single directional
  40.             }
  41.             if (!visited[neib]) {
  42.                 getCriticalRouters(ans, ids, lowLink, outGoingEdgeCount, visited, currNode, neib, currentId, startNode, graph);
  43.                 lowLink[currNode] = Math.min(lowLink[currNode], lowLink[neib]);
  44.                 if (ids[currNode] <= lowLink[neib]) {               // == -> circle      < -> bridge
  45.                     if (currNode == startNode) {
  46.                         if (outGoingEdgeCount[startNode] > 1) {
  47.                             ans.add(currNode);
  48.                         }

  49.                     } else {
  50.                         ans.add(currNode);
  51.                     }
  52.                 }

  53.             } else {
  54.                 lowLink[currNode] = Math.min(lowLink[currNode], ids[neib]);
  55.             }
  56.         }
  57.     }

  58.     private List<Integer>[] getGraph(int n, List<List<Integer>> connections) {
  59.         List<Integer>[] graph = new List[n];
  60.         for (int i = 0; i < n; i++) {
  61.             graph[i] = new ArrayList<>();
  62.         }
  63.         for (int i = 0; i < connections.size(); i++) {
  64.             List<Integer> edge = connections.get(i);
  65.             int prev = edge.get(0);
  66.             int next = edge.get(1);
  67.             graph[prev].add(next);
  68.             graph[next].add(prev);
  69.         }
  70.         return graph;
  71.     }
  72. }
复制代码



当时两个题都没做好,然而还是被recruiter捞起来了 1.10 onsite,求各位加点米
[/i]

评分

参与人数 5大米 +30 收起 理由
summer5507 + 2 很有用的信息!
RrrWww + 1 欢迎分享你知道的情况,会给更多积分奖励!
匿名用户-G8HFW + 25
phonger + 1 很有用的信息!
huang_anthea + 1 很有用的信息!

查看全部评分


上一篇:Wish店面
下一篇:illumina 新鲜有趣面经
🔗
qizh 2020-1-7 06:26:26 | 只看该作者
全局:
恭喜楼主,我做完OA结果recruiter放假到2月份,看来我完全没希望参加1月的hiring event了
回复

使用道具 举报

🔗
chb123 2020-1-7 07:43:46 | 只看该作者
全局:
请问你是全职还是实习OA2?
回复

使用道具 举报

🔗
Neo333 2020-1-7 12:30:04 | 只看该作者
全局:
请问这是 full time OA 还是 intern OA 啊
回复

使用道具 举报

🔗
Neo333 2020-1-7 12:30:10 | 只看该作者
全局:
请问这是 full time OA 还是 intern OA 啊
回复

使用道具 举报

🔗
 楼主| Lambsea 2020-1-8 03:29:51 | 只看该作者
全局:
chb123 发表于 2020-1-7 07:43
请问你是全职还是实习OA2?

sde 1 experienced

好像只要是oa2 题库都一样的
回复

使用道具 举报

🔗
 楼主| Lambsea 2020-1-8 03:30:10 | 只看该作者
全局:
Neo333 发表于 2020-1-7 12:30
请问这是 full time OA 还是 intern OA 啊

fulltime
回复

使用道具 举报

🔗
KHNOGG 2020-2-9 12:56:56 | 只看该作者
全局:
请问楼主你是社招吗?是什么职位呀?SDE2?
回复

使用道具 举报

🔗
 楼主| Lambsea 2020-2-13 03:52:52 | 只看该作者
全局:
KHNOGG 发表于 2020-2-9 12:56
请问楼主你是社招吗?是什么职位呀?SDE2?

SDE 1 社招 NYC 但是我蛮怪的考了两个设计题
回复

使用道具 举报

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

本版积分规则

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