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

google onsite 2/29

🔗
singledog2016 2016-3-21 07:08:13 | 只看该作者
全局:
楼主是在moutain view面的吗?
回复

使用道具 举报

🔗
ABCamille 2016-3-21 07:12:38 | 只看该作者
全局:
Czon 发表于 2016-3-2 01:26
楼主麻烦问一下第二题存了index以后怎么处理

https://leetcode.com/problems/lo ... istinct-characters/
回复

使用道具 举报

🔗
 楼主| hzyslddm 2016-3-22 03:16:14 | 只看该作者
全局:
singledog2016 发表于 2016-3-21 07:08
楼主是在moutain view面的吗?

是的,不过不是main campus,是一个building名字是CL开头的区域,离main campus几迈的距离吧
回复

使用道具 举报

🔗
夜辉冥 2016-3-24 15:01:28 | 只看该作者
全局:
strobogrammatic number那个follow up可以把数字都生成出来然后一个个数吗?
回复

使用道具 举报

🔗
bobzhang2004 2016-3-26 04:59:51 | 只看该作者
全局:
第二题follow up hashmap还是可以存occurence吧,
  1. public class LongestSubstringWithAtMostKDistinctCharactersStream {

  2.         static class StreamReader {
  3.                 int pos = 0;
  4.                 String str;

  5.                 public StreamReader(String str) {
  6.                         this.str = str;
  7.                 }

  8.                 char next() {// return next character
  9.                         return str.charAt(pos++);
  10.                 }

  11.                 boolean hasNext() {
  12.                         return pos < str.length();
  13.                 }
  14.         }

  15.         public static String lengthOfLongestSubstringKDistinct(StreamReader s, int k) {
  16.                 if (s == null || !s.hasNext()) {
  17.                         return "";
  18.                 }
  19.                 HashMap<Character, Integer> map = new HashMap<Character, Integer>();
  20.                 int max = 0;
  21.                 StringBuilder sb = new StringBuilder();
  22.                 String res = "";
  23.                 while (s.hasNext()) {
  24.                         char c = s.next();
  25.                         sb.append(c);
  26.                         if (!map.containsKey(c)) {
  27.                                 map.put(c, 1);
  28.                                 while (sb.length() > 0 && map.size() > k) {
  29.                                         char ch = sb.charAt(0);
  30.                                         sb.deleteCharAt(0);
  31.                                         map.put(ch, map.get(ch) - 1);
  32.                                         if (map.get(ch) == 0) {
  33.                                                 map.remove(ch);
  34.                                         }
  35.                                 }
  36.                         } else {
  37.                                 map.put(c, map.get(c) + 1);
  38.                         }
  39.                         if (sb.length() > max) {
  40.                                 max = sb.length();
  41.                                 res = sb.toString();
  42.                         }
  43.                 }

  44.                 return res;
  45.         }
  46.        
  47.         public static void main(String[] args) {
  48.                 StreamReader sr = new StreamReader("ababcbcbaaabbdef");
  49.                 System.out.println(lengthOfLongestSubstringKDistinct(sr, 2));
  50.                 StreamReader sr1 = new StreamReader("ababc");
  51.                 System.out.println(lengthOfLongestSubstringKDistinct(sr1, 2));
  52.                
  53.         }
  54. }
复制代码

补充内容 (2016-3-26 05:00):
用一个stringbuilder存下substring, 然后用deleteCharAt(0)进行移动
回复

使用道具 举报

🔗
 楼主| hzyslddm 2016-3-28 06:13:37 | 只看该作者
全局:
bobzhang2004 发表于 2016-3-26 04:59
第二题follow up hashmap还是可以存occurence吧,

follow up的时候LZ一开始是说拿stringbuilder存一下临时的string,面试官说如果string里面出现的字符种类很少但个数很多,比如ababbabababababba这样,一直只有a和b出现,但是字符种类就只有两个,那么临时的string就很长,因为follow up说的就是很长很长的string,要求的返回值也只是两个index,面试官觉得这样空间消耗太大,让我优化,于是才说了后面的解法
回复

使用道具 举报

🔗
singledog2016 2016-3-28 09:09:22 | 只看该作者
全局:
hzyslddm 发表于 2016-3-28 06:13
follow up的时候LZ一开始是说拿stringbuilder存一下临时的string,面试官说如果string里面出现的字符种类 ...

楼主那个最长假期问题的递推式没看懂,是不是有typo,能再解释一下吗?谢谢!
回复

使用道具 举报

🔗
singledog2016 2016-3-28 09:10:36 | 只看该作者
全局:
singledog2016 发表于 2016-3-28 09:09
楼主那个最长假期问题的递推式没看懂,是不是有typo,能再解释一下吗?谢谢!

回复错了,请无视
回复

使用道具 举报

🔗
dietpepsi 2016-5-31 08:55:49 | 只看该作者
全局:
第四题如果题意有且只有一个不同的意思是A中的一个字母被原位替换的话变成B,这题是可以做到O(n^2)的
一个O(n^3)的解法是这样:

1. 找到s[i] != s[j]的pair (i < j)
2. 我们将s[i]和s[j]视作A和B中那个不同字母,从i和j分别向左右扩展,例如s[i-1]==s[j-1]就可以向左扩展
3. 最后我们可以找到以i,j为不同的长pair,[i-x, i+y] 和[j-x, j+y],将总数增加 ans += y + x + 1;
4. return ans

这个方法可以进一步优化为O(n^2)

补充内容 (2016-5-31 08:57):
错了,应该是,ans += (y + 1) * (x + 1);
乘法原理

补充内容 (2016-5-31 08:59):
打不出来[~i~]前面那些s后面都有个i
回复

使用道具 举报

🔗
zhaoweigg 2016-7-31 08:50:05 | 只看该作者
全局:
dietpepsi 发表于 2016-5-31 08:55
第四题如果题意有且只有一个不同的意思是A中的一个字母被原位替换的话变成B,这题是可以做到O(n^2)的
一个 ...

很巧妙,怎么优化成 O(n^2) 呢?我感觉可以pro-process 一下, 拿到一个(i, j)和(x,y)的二维dp array

补充内容 (2016-7-31 11:43):
为啥不能直接编辑,只好补充了。。。

O(n^2) 的一种优化思路是:第一层循环针对 i, j之间的差值从1 到 len - 1, 这样的好处是不需要i,j每次都加1,而是可以从每次s[i + y] != s[j + y] 地方开始
回复

使用道具 举报

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

本版积分规则

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