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

Facebook Onsite

🔗
bobzhang2004 2016-4-4 01:39:38 | 只看该作者
全局:
没懂第二轮的小偷题是怎么做的。。。
回复

使用道具 举报

🔗
sealove999 2016-4-4 14:29:30 | 只看该作者
全局:
第三个
  1. public class Solution {
  2.   public List<String> wordLadder(String beginWord, String endWord, Set<String> wordList,
  3.       Set<String> tabu) {
  4.     if (beginWord.equals(endWord)) {
  5.       List<String> ret = new ArrayList<>();
  6.       ret.add(endWord);
  7.       return ret;
  8.     }
  9.     tabu.add(beginWord);

  10.     char[] arr = beginWord.toCharArray();
  11.     for (int i = 0; i < arr.length; i++) {
  12.       char orig = arr[i];
  13.       for (char c = 'a'; c <= 'z'; c++) {
  14.         if (c != orig) { // prune
  15.           arr[i] = c;
  16.           String w = String.valueOf(arr);
  17.           if (wordList.contains(w) && !tabu.contains(w)) { // prune with tabu
  18.             List<String> r = wordLadder(w, endWord, wordList, tabu);
  19.             if (r != null) {
  20.               r.add(0, beginWord);
  21.               return r;
  22.             }
  23.           }
  24.         }
  25.       }
  26.       arr[i] = orig; // reset
  27.     }

  28.     for (int i = 0; i <= beginWord.length(); i++) { // handle adding one letter
  29.       for (char c = 'a'; c < 'z'; c++) {
  30.         String w = beginWord.substring(0, i) + c + beginWord.substring(i);
  31.         if (wordList.contains(w) && !tabu.contains(w)) {
  32.           List<String> r = wordLadder(w, endWord, wordList, tabu);
  33.           if (r != null) {
  34.             r.add(0, beginWord);
  35.             return r;
  36.           }
  37.         }
  38.       }
  39.     }
  40.     return null;
  41.   }

  42.   public static void main(String[] args) {
  43.     Set<String> dict = new HashSet<>();
  44.     dict.add("hot");
  45.     dict.add("dot");
  46.     dict.add("dog");
  47.     dict.add("lot");
  48.     dict.add("log");
  49.     dict.add("cog");
  50.     dict.add("hit");
  51.     dict.add("lotg");
  52.     dict.add("aotg");
  53.     Solution s = new Solution();
  54.     System.out.println(s.wordLadder("hit", "cog", dict, new HashSet<String>()));
  55.     System.out.println(s.wordLadder("hit", "aotg", dict, new HashSet<String>()));
  56.     return;
  57.   }
  58. }
复制代码
回复

使用道具 举报

🔗
sealove999 2016-4-4 14:29:53 | 只看该作者
全局:
第二个
  1. public class Solution {
  2.   public boolean canSurvive(int n, int[] seq) {
  3.     boolean[][] survive = new boolean[seq.length][n];
  4.     Arrays.fill(survive[0], true); // the first day
  5.     survive[0][seq[0]] = false; // dead in the first day
  6.     for (int i = 1; i < seq.length; i++) {
  7.       for (int j = 0; j < n; j++) {
  8.         boolean left = j - 1 >= 0 ? survive[i - 1][j - 1] : false;
  9.         boolean right = j + 1 < n ? survive[i - 1][j + 1] : false;
  10.         survive[i][j] = (left || right) && seq[i] != j;
  11.       }
  12.     }
  13.     for (int i = 0; i < n; i++) {
  14.       if (survive[seq.length - 1][i]) {
  15.         return true;
  16.       }
  17.     }
  18.     return false;
  19.   }

  20.   public boolean canSurvive2(int n, int[] seq) {
  21.     boolean[] survive = new boolean[n];
  22.     Arrays.fill(survive, true); // the first day
  23.     survive[seq[0]] = false; // dead in the first day
  24.     for (int i = 1; i < seq.length; i++) {
  25.       boolean[] surviveNext = new boolean[n];
  26.       for (int j = 0; j < n; j++) {
  27.         boolean left = j - 1 >= 0 ? survive[j - 1] : false;
  28.         boolean right = j + 1 < n ? survive[j + 1] : false;
  29.         surviveNext[j] = (left || right) && seq[i] != j;
  30.       }
  31.       survive = surviveNext;
  32.     }
  33.     for (int i = 0; i < n; i++) {
  34.       if (survive[i]) {
  35.         return true;
  36.       }
  37.     }
  38.     return false;
  39.   }

  40.   public static void main(String[] args) {
  41.     Solution s = new Solution();
  42.     System.out.println(s.canSurvive(3, new int[] {1, 1}));
  43.     System.out.println(s.canSurvive2(3, new int[] {1, 1}));
  44.     return;
  45.   }
  46. }
复制代码

补充内容 (2016-4-4 14:30):
楼主思路好棒
回复

使用道具 举报

🔗
hyj143 2016-7-29 13:31:55 | 只看该作者
全局:
第二题, 对于第n天, 根据n-1天的小偷位置, 统计出在第n天小偷可能出现的位置。在第一天的时候, 小偷可以出现在所有的位置。

如果在其中一天, 小偷只可能出现在一个位置, 而这个人在这一天又恰好去了这个位置, 那么小偷就一定会被抓到。
回复

使用道具 举报

🔗
mantishrimp 2016-7-29 14:58:17 | 只看该作者
全局:
面成这样都会挂?!脸书真火啊~
回复

使用道具 举报

🔗
liurudahai 2016-9-28 13:20:02 | 只看该作者
全局:
楼主能具体讲讲第二题吗,没看懂
回复

使用道具 举报

🔗
liurudahai 2016-9-28 13:20:34 | 只看该作者
全局:
ccgogo123 发表于 2015-7-4 00:44
第二题,的确可以优化到constant extra space. 感觉这题是西雅图Office的保留题目,不敢说人人都考,但是概 ...

请问一下这题怎么做啊
回复

使用道具 举报

🔗
liurudahai 2016-9-28 13:23:49 | 只看该作者
全局:
mantishrimp 发表于 2016-7-29 14:58
面成这样都会挂?!脸书真火啊~

感觉很多面试官也不考虑题目难易,他这个题一直拿来面,答案他都知道自然就觉得容易,然后谁要是没做出来就写差FEEDBACK
回复

使用道具 举报

🔗
liurudahai 2016-9-28 22:35:16 | 只看该作者
全局:

能讲讲思路吗,代码看不明白
回复

使用道具 举报

🔗
liurudahai 2016-9-28 22:55:43 | 只看该作者
全局:

终于看懂了,不过你的第二种解法每轮新建一个数组,那空间也是O(NK)不是O(N)吧
回复

使用道具 举报

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

本版积分规则

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