10月28,K神开课讲数据科学,你来吗?


一亩三分地论坛

 找回密码
 获取更多干活,快来注册
Babeltime游戏工作室招工程师、美术和策划
Tubi TV招安卓、前端和机器学习工程师
把贵司招聘信息放这里
查看: 3676|回复: 16
收起左侧

word ladder 1.5 如果被challenge用26个char iteration太慢的话,大家怎么optimize?

[复制链接] |试试Instant~ |关注本帖
jyty 发表于 2016-11-27 09:41:16 | 显示全部楼层 |阅读模式

2016(10-12月) 码农类 硕士 全职@Linkedin - 内推 - Onsite |Other在职跳槽

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

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

x
见过不少面经提到被问到1.5版本,就是只输出一条最短路径,同时还被challenge用26个字符iteration太慢,想问问大家怎么回答这个follow up 的?
solarsys 发表于 2016-11-29 03:23:45 | 显示全部楼层
trieNode 接hashmap  hashmap 的value 继续是trieNode 这样每次获取只有O1
回复 支持 3 反对 0

使用道具 举报

小A要当码农 发表于 2016-11-28 09:49:36 | 显示全部楼层
同关注一下。。。
回复 支持 反对

使用道具 举报

swufejun 发表于 2016-11-28 11:26:09 | 显示全部楼层

同关注一下。。。 + 1
回复 支持 反对

使用道具 举报

春山寒 发表于 2016-11-28 11:32:11 | 显示全部楼层
是不是可以用trie来做 在每个position 只变化相同level trie里面有的字母
回复 支持 反对

使用道具 举报

xietao0221 发表于 2016-11-29 02:57:49 | 显示全部楼层
iterate太慢是不是能用一个hashmap啊,就用不着遍历26个,有几个iterate几个就好了
回复 支持 反对

使用道具 举报

say543 发表于 2016-12-4 13:42:41 | 显示全部楼层
solarsys 发表于 2016-11-29 03:23
trieNode 接hashmap  hashmap 的value 继续是trieNode 这样每次获取只有O1

不是太懂trieNode接hashmap是什麼意思? trie是同樣的prefixtrie怎麼確定兩個字距離只有1呢由o(1)能不能再說清楚某...求指教....
回复 支持 反对

使用道具 举报

 楼主| jyty 发表于 2016-12-6 14:14:48 | 显示全部楼层
xietao0221 发表于 2016-11-29 02:57
iterate太慢是不是能用一个hashmap啊,就用不着遍历26个,有几个iterate几个就好了
.1point3acres缃
hashmap的key是啥?
回复 支持 反对

使用道具 举报

say543 发表于 2016-12-8 16:08:00 | 显示全部楼层
懂solarsys method 的童鞋能指教一下吗? 想很久还是不懂...
回复 支持 反对

使用道具 举报

ausgoo 发表于 2016-12-10 02:29:34 | 显示全部楼层
回答twoEnd BFS? 在leetcode discuss上有详解。 我自己试了下,快很多。谢谢。
回复 支持 反对

使用道具 举报

say543 发表于 2016-12-10 15:31:12 | 显示全部楼层
ausgoo 发表于 2016-12-10 02:29
回答twoEnd BFS? 在leetcode discuss上有详解。 我自己试了下,快很多。谢谢。

two way bfs 不知道面试官给不给用 a-z 的enumeration...
回复 支持 反对

使用道具 举报

smallwarm 发表于 2016-12-11 14:31:11 | 显示全部楼层
RE .... 感觉这个非常值得讨论, 同关注!! +1
回复 支持 反对

使用道具 举报

小A要当码农 发表于 2016-12-19 07:07:00 | 显示全部楼层
solarsys 发表于 2016-11-29 03:23
trieNode 接hashmap  hashmap 的value 继续是trieNode 这样每次获取只有O1

这也不是O(1)吧, worst case还是每次都是O(26)?
回复 支持 反对

使用道具 举报

yangluphil 发表于 2016-12-19 07:24:39 | 显示全部楼层
可以预处理得到一个graph,每个单词是一个graph node,(V1, V2) is in Edges iff diff(V1, V2) == 1
回复 支持 反对

使用道具 举报

solarsys 发表于 2016-12-20 06:12:19 | 显示全部楼层
最近都没上自己的账号 不过仔细想了想好像hashmap的方法好像是自己误入歧途了。。大家请无视我的误导
回复 支持 反对

使用道具 举报

蓝蓝天了 发表于 2017-3-9 12:10:09 | 显示全部楼层
请问下这样对不对, 在word ladder 基础上 就用了parent hash map backtracking 可以吗?

运行了简单case 可以出正确结果的


  1. import java.util.ArrayDeque;
  2. import java.util.ArrayList;
  3. import java.util.Arrays;
  4. import java.util.HashMap;
  5. import java.util.HashSet;
  6. import java.util.List;
  7. import java.util.Map;
  8. import java.util.Queue;. 鍥磋鎴戜滑@1point 3 acres
  9. import java.util.Set;

  10. public class WordLadder15 {
  11.        
  12.         Map<String, Set<String>> map = new HashMap<>();
  13.         Map<String, String> pmap = new HashMap<>(); //parents
  14.        
  15.         public List<String> ladderLength(String bw, String ew, List<String> words) {
  16.                 List<String> list = new ArrayList<>(words);
  17.                 if (bw.equals(ew))
  18.                         return null;
  19.                 list.add(bw);
  20.                 list.add(ew);. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
  21.                 // build graph
  22.                 for (String w : list) {
  23.                         Set<String> set = new HashSet<>();
  24.                         for (String w2 : list) {
  25.                                 if (!w2.equals(w) && connect(w2, w)). 1point 3acres 璁哄潧
  26.                                         set.add(w2);
  27.                         }
  28.                         map.put(w, set);
  29.                 }
  30.                 Queue<String> q = new ArrayDeque<>();
  31.                 Set<String> seen = new HashSet<>();
  32.                 q.offer(bw);
  33.                 seen.add(bw);
  34.                 while (!q.isEmpty()) {
  35.                         int len = q.size();
  36.                         for (int i = 0; i < len; i++) {
  37.                                 String cur = q.poll();
  38.                                 Set<String> set = map.get(cur);
  39.                                 for (String nei : set) {
  40.                                         if (seen.add(nei)){
  41.                                                 pmap.put(nei, cur);
  42.                                                 q.offer(nei);
  43.                                         }. 1point 3acres 璁哄潧
  44.                                         if (nei.equals(ew))
  45.                                                 return getPath(nei);
  46.                                 }-google 1point3acres
  47.                         }
  48.                 } 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
  49.                 return new ArrayList<String>();
  50.         }. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
  51.        
  52.         private List<String> getPath(String end){
  53.                 List<String> res = new ArrayList<>();
  54.                 String parent=end;
  55.                 while(parent!=null){
  56.                         res.add(0, parent);
  57.                         parent=pmap.get(parent);. visit 1point3acres.com for more.
  58.                 }.鐣欏璁哄潧-涓浜-涓夊垎鍦
  59.                 return res;
  60.         }
  61. . more info on 1point3acres.com
  62.         // build the graph: which connects with which
  63.         private boolean connect(String a, String b) {
  64.                 int diff = 0;
  65.                 for (int i = 0; i < a.length(); i++) {
  66.                         if (a.charAt(i) != b.charAt(i))
  67.                                 diff++;
    . 鍥磋鎴戜滑@1point 3 acres
  68.                 }.鏈枃鍘熷垱鑷1point3acres璁哄潧
  69.                 return diff == 1;
  70.         }

  71.         public static void main(String[] args) {
    .鐣欏璁哄潧-涓浜-涓夊垎鍦
  72.                 WordLadder15 sol = new WordLadder15();
  73.                 List<String> res= sol.ladderLength("hit", "cog",
  74.                                 new ArrayList<String>(Arrays.asList("hot", "dot", "dog", "lot", "log", "cog")));
  75.                 for(String s: res) System.out.println(" "+ s);
  76.         }

  77. }
复制代码
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

custom counter

GMT+8, 2017-9-20 08:13

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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