123
返回列表 发新帖
楼主: user123456
跳转到指定楼层
上一主题 下一主题
收起左侧

Google电面挂经 + 求助

🔗
 楼主| user123456 2016-4-2 04:25:49 | 只看该作者
全局:
今天HR告诉我加面,可能面试官没有fail我,大家加油!
回复

使用道具 举报

🔗
ScottShao 2016-4-2 06:18:32 | 只看该作者
全局:
bless 楼主

我也觉得union find应该比较好做:
可以分成两步:
union:
需要三个数据结构:
Edge: src, dest, ratio
HashSet<Edge>:从点到其root的dest,key是src和dest
HashMap<Node, Set<Node>>:点和他的root集,因为某个点可能有很多root,比如说A——C,B——C,c的root就是a和b
然后复杂度是O(n^2)
find:
直接在HashSet里面找就可以,总复杂度是O(N)
回复

使用道具 举报

🔗
jy_121 2016-4-27 05:52:39 | 只看该作者
全局:
dimi 发表于 2016-4-1 10:54
仔細想想這題目不難。bfs+backtracking

求问bfs怎么backtracking?
回复

使用道具 举报

🔗
jy_121 2016-4-27 05:59:41 | 只看该作者
全局:
user123456 发表于 2016-3-29 23:20
有向图 + BFS可行。但在推进的过程中,除了需要像普通的BFS需要存一个queue和一个visited的标记外,visit ...

你好,我想问下bfs在遍历时是怎么保存每条路径上的乘机呢?谢谢
回复

使用道具 举报

🔗
hyj143 2016-6-10 07:41:07 | 只看该作者
全局:
用 DFS 就可以了, 只需要经过一个特定点一次, 这个点上的 value 是不会变化的, 没有必要做sum啊等其他的需要遍历多次的情况
回复

使用道具 举报

🔗
tigercode 2016-9-12 07:02:55 | 只看该作者
全局:
daniel_hl 发表于 2016-3-29 14:03
处理完f1后应该要根据graph来建立一个HashMap来存任意两个string的ratio吧,比如HashMap, 这样在处理f2时 ...

根据f1和f2的size来看, 应该也是先根据f1建立Map<Character, Map<Character, ratio>>,然后从任意一点开始BFS or DFS,能reach到的所有点都直接存到上面的Map中,这样f2每次直接查就好了;

另外一种选择是f1只用neighor建好map, 先不BFS. 等到f2的时候开始BFS, 途中遇到的所有点,都更新上面的map,这样只有前面的f2需要BFS,后面的基本都能直接look up,相当于cache了
回复

使用道具 举报

🔗
omega094 2016-9-12 09:40:42 | 只看该作者
全局:
leetcode 399
ORZ...ORZ....ORZ
回复

使用道具 举报

🔗
shisoft 2016-9-13 11:11:20 | 只看该作者
全局:
看了解释后直接写一次性跑通

  1.        public void addEdge(String sa, String sb, double val, Map<String, Map<String, Double>> graph) {
  2.             Map<String, Double> vertex = graph.get(sa);
  3.             if (vertex == null) {
  4.                 vertex = new HashMap<>();
  5.                 graph.put(sa, vertex);
  6.             }
  7.             vertex.put(sb, val);
  8.         }

  9.         public double[] calcEquation(String[][] equations, double[] values, String[][] queries) {

  10.             Map<String, Map<String, Double>> graph = new HashMap<>();

  11.             for (int i  = 0; i < values.length; i++) {
  12.                 String[] syms = equations[i];
  13.                 String sym1 = syms[0];
  14.                 String sym2 = syms[1];
  15.                 addEdge(sym1, sym2, values[i], graph);
  16.                 addEdge(sym2, sym1, 1 / values[i], graph);
  17.             }


  18.             double[] rt = new double[queries.length];
  19.             for (int i = 0;i < queries.length; i++) {
  20.                 String[] syms = queries[i];
  21.                 String sym1 = syms[0];
  22.                 String sym2 = syms[1];
  23.                 Map<String, Double> vertexA = graph.get(sym1);
  24.                 rt[i] = -1;
  25.                 if (vertexA == null) {
  26.                     continue;
  27.                 }
  28.                 rt[i] = countRatio(graph, sym1, sym2, new HashSet<>());
  29.             }
  30.             return rt;
  31.         }

  32.         private double countRatio(Map<String, Map<String, Double>> graph, String syma, String symb, Set<String> visited) {
  33.             Map<String, Double> vertex = graph.get(syma);
  34.             visited.add(syma);
  35.             if (vertex == null) return -1;
  36.             if (syma.equals(symb)) return 1;
  37.             for (Map.Entry<String, Double> e : vertex.entrySet()) {
  38.                 String sb = e.getKey();
  39.                 Double ratio = e.getValue();
  40.                 if (!visited.contains(sb)) {
  41.                     double cr = countRatio(graph, sb, symb, visited);
  42.                     if (cr != -1) {
  43.                         double res = ratio * cr;
  44.                         if (visited.contains(symb)) return res;
  45.                     }
  46.                 }
  47.             }
  48.             return -1;
  49.         }
复制代码
回复

使用道具 举报

🔗
cicean 2016-9-13 23:30:01 | 只看该作者
本楼:
全局:
这么难?
回复

使用道具 举报

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

本版积分规则

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