在国外一跟老外吵架口语立刻就不够用了

一亩三分地论坛

 找回密码
 Sign Up 注册获取更多干货
E轮2.5亿美元融资
K12教育独角兽一起作业
北京-诚聘人工智能/教育/大数据岗
坐标湾区
Games Startup
招聘游戏开发工程师
游戏初创公司招聘工程师、UIUX Designer和游戏策划
码农求职神器Triplebyte:
不用海投
内推多家公司面试
把贵司招聘信息放这里
查看: 2683|回复: 18
收起左侧

挨骂总OA面经

[复制链接] |试试Instant~ |关注本帖
reddatecookies 发表于 2017-6-13 14:11:59 | 显示全部楼层 |阅读模式

2017(4-6月) 码农类General 本科 全职@Amazon - Other - 在线笔试  | Other | 其他

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

您需要 登录 才可以下载或查看,没有帐号?Sign Up 注册获取更多干货

x
遇到了一道没有做过的题,用了union find现做出来的:(场景叙述做了处理)
给出一串Pair, 每个pair说明两个人互为朋友,[A,B] 说明A和B是朋友,[C,B] 说明C和B是朋友,{D,E}说明E和D是朋友。
找出人数最大的朋友圈,如果两个朋友圈人数相等,返回有着字典顺序最小朋友的那个圈。

代码:
import java.util.*;

public class FriendCircle {
    public static void main(String[] args) {. 留学申请论坛-一亩三分地

        assert true == Arrays.equals(. 一亩-三分-地,独家发布
                new String[] {"friend3", "friend4", "friend5"}
                , new FriendFriendCircle().findLargestFriendCircle(new String[][]{
                        {"friend1", "friend2"},
                        {"friend3", "friend4"},
                        {"friend4", "friend5"},
                }));

        assert true == Arrays.equals(
                new String[] {"friend1", "friend2"}. 牛人云集,一亩三分地
                , new FriendFriendCircle().findLargestFriendCircle(new String[][]{
                        {"friend1", "friend2"},
                        {"friend3", "friend4"},
                }));. more info on 1point3acres


    }

    private String[] findLargestFriendCircle(String[][] arr1) {
. from: 1point3acres
        Map<String, String> unionKeys = new HashMap<>();
        for(String []pair:arr1) {
            unionKeys.put(pair[0],pair[0]);
            unionKeys.put(pair[1],pair[1]);
        }.本文原创自1point3acres论坛


        for(String[] pair: arr1) {
            String unionKey = null, other = null;
            String key0 = unionKeys.get(pair[0]), key1 = unionKeys.get(pair[1]);. From 1point 3acres bbs
            if(key0.compareTo(key1) < 0) {
                unionKey = key0;
                other = pair[1];
            } else {
                unionKey = key1; 来源一亩.三分地论坛.
                other = pair[0];
            }
            unionKeys.put(other, unionKey);

        }

        Map<String, Integer> counts = new HashMap<>();
        for(Map.Entry<String, String> ent : unionKeys.entrySet()) {
            counts.put(ent.getValue(), counts.getOrDefault(ent.getValue(), 0) + 1);
        }
.1point3acres网
        int max = -1;
        String maxKey = null;. more info on 1point3acres
        for(Map.Entry<String, Integer> ent : counts.entrySet()) {. 1point 3acres 论坛
            if(ent.getValue() > max || (ent.getValue() == max && ent.getKey().compareTo(maxKey) < 0)) {. 1point3acres
                max = ent.getValue();
                maxKey = ent.getKey();. Waral 博客有更多文章,
            }
        }

        String[] res = new String[max];
        for(Map.Entry<String, String> ent : unionKeys.entrySet()) {
来源一亩.三分地论坛.             if(ent.getValue().equals(maxKey)) {
                res[--max] = ent.getKey();. 1point 3acres 论坛
            }
        }
. Waral 博客有更多文章,
        Arrays.sort(res);. from: 1point3acres
        System.out.println(Arrays.toString(res));. more info on 1point3acres
. 一亩-三分-地,独家发布
        return res;
    }


}


. from: 1point3acres
. 牛人云集,一亩三分地



. 一亩-三分-地,独家发布
补充内容 (2017-6-13 14:14):
还有请问:A家OA没过,有无冷冻期,能不能继续投?谢谢

评分

2

查看全部评分

wwei17 发表于 2017-9-22 04:21:00 | 显示全部楼层
你的union find的算法不太对 我跑了一下case {{“1”,“2”}, {“3”,“4”},{ “1“, ”3”}}, 其结果应该为 1234, 但是你的算法只得到123, 原因出在这里:
        for(Map.Entry<String, String> ent : unionKeys.entrySet()) {-google 1point3acres.本文原创自1point3acres论坛
            counts.put(ent.getValue(), counts.getOrDefault(ent.getValue(), 0) + 1);
        }
是不能直接加的 要重复寻找unionkeys的unionkeys的unionkeys的。。。直到key不变为止 具体算法见 https://www.cs.princeton.edu/~rs/AlgsDS07/01UnionFind.pdf
回复 支持 1 反对 0

使用道具 举报

iceman 发表于 2017-10-29 12:28:00 | 显示全部楼层
顶12楼 - local run 加了这段就能过1234 case了:. 牛人云集,一亩三分地
        /************************************************************/
        // critical: get final root for each person
        // need this to ensure all people are mapped to "real" root
        for(Map.Entry<String, String> ent : pre.entrySet()) {
                String curVal = ent.getValue();
                String curKey = ent.getKey();
                if (root.containsKey(curVal)) {
                        String finalRoot = find(root, curVal);
                        pre.put(curKey, finalRoot);. Waral 博客有更多文章,
                }
        }
        /************************************************************/
回复 支持 1 反对 0

使用道具 举报

UAPOPPING 发表于 2017-8-24 11:31:07 | 显示全部楼层
请问什么叫做字典顺序最小的?每个朋友圈是一个字符串数组,对于字符串数组如何比较字典顺序?
回复 支持 0 反对 1

使用道具 举报

cawe 发表于 2017-6-15 06:10:35 | 显示全部楼层
oa没过似乎没有冷冻期
回复 支持 1 反对 0

使用道具 举报

 楼主| reddatecookies 发表于 2017-6-16 13:33:04 | 显示全部楼层
cawe 发表于 2017-6-15 06:10
oa没过似乎没有冷冻期

感谢经验!
回复 支持 反对

使用道具 举报

Tomyxue 发表于 2017-7-7 14:29:43 | 显示全部楼层
楼主,方便透露一下OA的结果怎么样,现在什么状态了吗?谢谢
回复 支持 反对

使用道具 举报

uscgaopeng 发表于 2017-7-7 22:01:53 | 显示全部楼层
我最近也投了亚麻,想跟着楼上问一下啊!
Mobile Apps Category (English)728x90
回复 支持 反对

使用道具 举报

supman 发表于 2017-7-7 22:34:09 | 显示全部楼层
。。。这个。。这个。。。哥们。。咱好好说话行吗
回复 支持 反对

使用道具 举报

dniny 发表于 2017-7-9 01:09:25 | 显示全部楼层
请问楼主,OA 可选的coding language 真的只有c++ 和 java 么?
回复 支持 反对

使用道具 举报

lulu_0386 发表于 2017-7-9 09:26:14 | 显示全部楼层
突然明白了是亚麻。。。
回复 支持 反对

使用道具 举报

Andrew007 发表于 2017-9-10 00:55:46 | 显示全部楼层
感觉挺复杂的啊,OA这么短时间能搞的定不? 感谢分享。
回复 支持 反对

使用道具 举报

klai 发表于 2017-9-13 10:32:32 | 显示全部楼层
多谢分享。. more info on 1point3acres
请问一下这题输入 (a,b), (c,b) 和 (a,b), (b,c) 的返回是一样的么(a, b, c)?
回复 支持 反对

使用道具 举报

waynetang 发表于 2017-9-23 04:17:27 | 显示全部楼层
UAPOPPING 发表于 2017-8-24 11:31
请问什么叫做字典顺序最小的?每个朋友圈是一个字符串数组,对于字符串数组如何比较字典顺序?

我感觉他这个答案是当有两个朋友圈数量一样时,比较两个朋友圈里面的字典序最小的人的字典序,我觉得应该是这样
回复 支持 反对

使用道具 举报

waynetang 发表于 2017-9-23 10:01:35 | 显示全部楼层
自己写了个比较好理解的版本,供大家参考. Waral 博客有更多文章,
static Map<String,String> pre = new HashMap<>();
    public static String[] findLargestFriendCircle(String[][] arr) {
        for(int i = 0; i < arr.length; i ++){
            String m = arr[i][0];. Waral 博客有更多文章,
            pre.put(m, m);
            String n = arr[i][1];
            pre.put(n, n);
        }
        for(int i = 0; i < arr.length; i ++){
            String m = arr[i][0];
            String n = arr[i][1];
            String parM = get(m);
            String parN = get(n);
            if(parM.compareTo(parN) < 0){
                pre.put(parM, parN);
            }
            else{
                pre.put(parN, parM);
            }
        }
        Map<String, List<String>> map = new HashMap<>();.留学论坛-一亩-三分地
        for(String key : pre.keySet()){. 1point 3acres 论坛
            String root = get(key);. more info on 1point3acres
            if(map.containsKey(root)){
                map.get(root).add(key);
            }. Waral 博客有更多文章,
            else{
                List<String> list = new ArrayList<>();
                list.add(key);
                map.put(root, list);
            }
        }
        int max = 0;
        String maxKey = "";
        for(String str : map.keySet()){
            if(map.get(str).size() > max || map.get(str).size() == max && str.compareTo(maxKey) < 0){. 围观我们@1point 3 acres
                max = map.get(str).size();. From 1point 3acres bbs
                maxKey = str;. Waral 博客有更多文章,
            }
        }
        List<String> list = map.get(maxKey);
        String[] result = new String[list.size()];
        for(int i = 0; i < list.size(); i ++){
            result[i] = list.get(i);
        }
        return result;. 1point 3acres 论坛
    }
    public static String get(String name){
        String root = name;
        while(pre.get(root) != root){
            root = pre.get(root);. 围观我们@1point 3 acres
        }
.本文原创自1point3acres论坛        while(pre.get(name) != root){
            String par = pre.get(name);. Waral 博客有更多文章,
            pre.put(name, root);-google 1point3acres
            name = par;
        }. 牛人云集,一亩三分地
        return root;
    }
回复 支持 反对

使用道具 举报

zhxymacau2017 发表于 2018-1-24 04:42:20 | 显示全部楼层
waynetang 发表于 2017-9-23 10:01
自己写了个比较好理解的版本,供大家参考.本文原创自1point3acres论坛
static Map pre = new HashMap();
    public static String[]  ...

谢谢你的solution,  很有启发
回复 支持 反对

使用道具 举报

tabletenniser 发表于 2018-1-24 14:43:43 | 显示全部楼层
不可以给图转成adjacency list之后给所有friend加到一个untraversed set里面,完了一个一个拿出来进行dfs来找出来每个朋友圈的size么? 之后dfs每traverse到一个friend就给remove from那个untraversed set?
回复 支持 反对

使用道具 举报

zzgzzm 发表于 2018-2-3 03:05:35 | 显示全部楼层
My solution. Ne sure to compress path in union-find. I also used the smallest person's name as representative of a circle.. visit 1point3acres for more.
  1. typedef vector<string> VS;. more info on 1point3acres
  2. unordered_map<string, string> rep; // representative of a circle-google 1point3acres

  3. string Find(string s) { // find circle representative for s
  4.     if (!rep.count(s)) rep[s] = s;
  5.     else if (rep[s] != s) rep[s] = Find(rep[s]);. visit 1point3acres for more.
  6.     return rep[s];
  7. }

  8. void Union(VS& p) { // join cicles of p[0] and p[1]
  9.     string rep1(Find(p[0])), rep2(Find(p[1]));
  10.     (rep1 < rep2)? rep[rep2] = rep1 : rep[rep1] = rep2;
  11. }
    .留学论坛-一亩-三分地

  12. VS largestCircle(vector<VS>& pairs) {   
  13.     for (auto& p : pairs) Union(p);
  14.     unordered_map<string, VS> circles;
    . 1point3acres
  15.     for (auto& p : rep) circles[p.second].push_back(p.first);
  16.    
  17.     int maxCircle = 0;.1point3acres网
  18.     string maxRep;.留学论坛-一亩-三分地
  19.     for (auto& p : circles)
  20.         if (p.second.size() > maxCircle ||
  21.            p.second.size() == maxCircle && p.first < maxRep)
  22.             maxCircle = p.second.size(), maxRep = p.first;
  23.     return circles[maxRep];
  24. }
复制代码
回复 支持 反对

使用道具 举报

zzgzzm 发表于 2018-2-3 03:27:04 | 显示全部楼层
tabletenniser 发表于 2018-1-24 14:43
不可以给图转成adjacency list之后给所有friend加到一个untraversed set里面,完了一个一个拿出来进行dfs来 ...

嗯,我觉得这样也可以,类似于"count number of island"题,但同时要记录每个“island”的大小和最小的名字。
回复 支持 反对

使用道具 举报

本版积分规则

提醒:发帖可以选择内容隐藏,部分板块支持匿名发帖。请认真读完以下全部说明:

■隐藏内容方法: [hide=200]你想要隐藏的内容比如面经[/hide]
■意思是:用户积分低于200则看不到被隐藏的内容
■可以自行设置积分值,不建议太高(200以上太多人看不到),也不建议太低(那就没必要隐藏了)
■建议只隐藏关键内容,比如具体的面试题目、涉及隐私的信息,大部分内容没必要隐藏。
■微信/QQ/电子邮件等,为防止将来被骚扰甚至人肉,以论坛私信方式发给对方最安全。
■匿名发帖的板块和方法:http://www.1point3acres.com/bbs/thread-405991-1-1.html

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明

custom counter

GMT+8, 2018-5-23 07:51

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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