传说中的谷歌招聘委员会成员之一,从幕后走出来,教你学系统设计!


一亩三分地论坛

 找回密码
 获取更多干活,快来注册
天天打游戏、照样领工资、还办H1B
这份工作你要不要?
把贵司招聘信息放这里
查看: 3762|回复: 20
收起左侧

Google 电面第2面 9/11

[复制链接] |试试Instant~ |关注本帖
complete_46 发表于 2015-9-11 07:35:40 | 显示全部楼层 |阅读模式

2015(7-9月) 码农类 硕士 全职@Google - 内推 - 技术电面 |Otherfresh grad应届毕业生

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

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

x
第一题
Longest Consecutive Sequence

第二题
InterleavingIterator Flatten 2D Vector 变种 ,输入不再是List<List<>>而是List<Iterator>,遍历顺序也变成了先遍历每一个list的第n个元素. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
比如 说 <1,2,3><4, 5, 6><7, 8>. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
要返回的是<1, 4, 7, 2, 5, 8, 3, 6>

第二题答的不怎么样,code也没写的完整,发面经求RP吧
顺便 求点米呀

评分

1

查看全部评分

本帖被以下淘专辑推荐:

KevinFromJail 发表于 2015-9-11 10:53:33 | 显示全部楼层
第二个问题是每次从头取, 再放到队列尾巴。空指针不放入。空队列停止。
回复 支持 反对

使用道具 举报

say543 发表于 2015-9-11 12:31:24 | 显示全部楼层
KevinFromJail 发表于 2015-9-11 10:53. From 1point 3acres bbs
第二个问题是每次从头取, 再放到队列尾巴。空指针不放入。空队列停止。

same solution. 感谢楼主分享
回复 支持 反对

使用道具 举报

宝贝忆彼岸 发表于 2015-9-11 21:53:42 | 显示全部楼层
KevinFromJail 发表于 2015-9-11 10:53
第二个问题是每次从头取, 再放到队列尾巴。空指针不放入。空队列停止。
. Waral 鍗氬鏈夋洿澶氭枃绔,
你好,方不方便贴个代码呢?因为不知道hasNext()和next()这两个方法里怎么让外部的iterator循环的遍历,是每次都遍历2变吗?
回复 支持 反对

使用道具 举报

flexwang 发表于 2015-9-12 00:00:02 | 显示全部楼层
第二题为什么是先遍历每一个list的第n个元素?
回复 支持 反对

使用道具 举报

storm_hair 发表于 2015-9-14 09:08:42 | 显示全部楼层
第一题LEETCODE已经有了
回复 支持 反对

使用道具 举报

阿海 发表于 2015-9-15 01:03:55 | 显示全部楼层
我写了这么长的代码,被几行代码击败。哭了
# class Solution(object):
#     def longestConsecutive(self, nums):
#         """
#         :type nums: List[int]
#         :rtype: int
#         """
#         if not nums:
#             return 0.鏈枃鍘熷垱鑷1point3acres璁哄潧
#         max_length = 1
#         length = 1
#         smallest_num = nums[0].1point3acres缃
#         hash_table = dict()
#         hash_table[smallest_num] = 0.1point3acres缃
#         for i in range(len(nums)):
#             if nums[i] not in hash_table:
#                 hash_table[nums[i]] = i
#             if nums[i] < smallest_num:
#                 smallest_num = nums[i]

#         while hash_table:
#             smallest_num += 1
#             if smallest_num in hash_table:
#                 length += 1
#                 hash_table.pop(smallest_num)

#             else:
#                 smallest_num = hash_table.keys()[0]
#                 length = 1
#                 for k, v in hash_table.iteritems():
#                     if k < smallest_num:
#                         smallest_num = k.鏈枃鍘熷垱鑷1point3acres璁哄潧
#                 hash_table.pop(smallest_num)
#             max_length = max(max_length, length)
#         return max_length


class Solution:
    def longestConsecutive(self, nums):
        nums = set(nums)
        best = 0
        for n in nums:
            if n - 1 not in nums:
                m = n + 1
                while m in nums:. 1point3acres.com/bbs
                    m += 1. 1point3acres.com/bbs
                best = max(best, m - n)
        return best
回复 支持 反对

使用道具 举报

kelvinzhong 发表于 2015-9-15 15:18:28 | 显示全部楼层
阿海 发表于 2015-9-15 01:03
我写了这么长的代码,被几行代码击败。哭了
# class Solution(object):
#     def longestConsecutive(se ...

你给出的短代码的答案,我觉得不是O(n)的呀,至少worst case应该不是O(n), 因为set操作
回复 支持 反对

使用道具 举报

tbu 发表于 2015-9-15 15:50:03 | 显示全部楼层
请教LZ, Google全职电面一共有几轮呢?
回复 支持 反对

使用道具 举报

storm_hair 发表于 2015-9-15 19:14:32 | 显示全部楼层
tbu 发表于 2015-9-15 15:50. 鍥磋鎴戜滑@1point 3 acres
请教LZ, Google全职电面一共有几轮呢?
. 鍥磋鎴戜滑@1point 3 acres
一轮电面 然后onsite
回复 支持 反对

使用道具 举报

peach=。= 发表于 2015-9-18 14:57:20 | 显示全部楼层
say543 发表于 2015-9-11 12:31
same solution. 感谢楼主分享
. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
请问可以说详细一点吗?这题是要implement一个iterator还是返回arraylist呢?另外,从头取再放到队列尾巴是什么意思呢?求指教!
回复 支持 反对

使用道具 举报

douya 发表于 2015-9-20 10:52:35 | 显示全部楼层
KevinFromJail 发表于 2015-9-11 10:53. Waral 鍗氬鏈夋洿澶氭枃绔,
第二个问题是每次从头取, 再放到队列尾巴。空指针不放入。空队列停止。
. 1point3acres.com/bbs
这里这个iterator的意思是,next() 下一个list?
所以我大概写了下,这样对不对?

result
while(hasNext()){-google 1point3acres
    list = next();
    if(list.isEmpty()) break;.1point3acres缃
    result.add(list.get(0));
    list.remove(0);. 1point 3acres 璁哄潧
}. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴

return result;
回复 支持 反对

使用道具 举报

stellari 发表于 2015-9-20 20:03:24 | 显示全部楼层
douya 发表于 2015-9-20 10:52
这里这个iterator的意思是,next() 下一个list?
所以我大概写了下,这样对不对?

你大概是没理解这个题意。题目的意思并不是希望得到result这个完整序列,而是让你实现AlternateIterator::hasNext()和AternateIterator::next()这两个函数。题目中本来可以给List<List<Type> >, 但是实际上却用Iterator替换掉了内层的List,稍微增加了一些难度,但是算法本质是一样的。这道题的输入甚至还可以可给成Iterator<Iterator<Type> >,做法都是一样的。
回复 支持 反对

使用道具 举报

douya 发表于 2015-9-21 04:58:34 | 显示全部楼层
stellari 发表于 2015-9-20 20:03
你大概是没理解这个题意。题目的意思并不是希望得到result这个完整序列,而是让你实现AlternateIterator: ...

哦,多谢高人指点。我大概明白了。我试着写了下。.鏈枃鍘熷垱鑷1point3acres璁哄潧
您看这样写对不对:
Class MyIterator{.鐣欏璁哄潧-涓浜-涓夊垎鍦

    List<Iterator> input;. visit 1point3acres.com for more.
    int index=0;
    public MyIterator(List<Iterator> input){. more info on 1point3acres.com
        this. input = input;      
    }
    public int next(){
        Iterator iter=input.get(index);
        int result;
        if(iter.hasNext()){
            result=iter.next();. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
        }
        if(!iter.hasNext()) {
            input.remove(iter);
        } else {
            index=(index+1)%input.size();
        }
        return result;
    } 鏉ユ簮涓浜.涓夊垎鍦拌鍧.

    public boolean hasNext(){
        return !input.isEmpty();
    }
}
回复 支持 反对

使用道具 举报

stellari 发表于 2015-9-21 13:04:02 | 显示全部楼层
douya 发表于 2015-9-21 04:58
哦,多谢高人指点。我大概明白了。我试着写了下。. 1point 3acres 璁哄潧
您看这样写对不对:
Class MyIterator{

这个是通不过的。如果List中所有的Iterator都为空,那么第一次调用hasNext()会返回什么?应该返回什么?
. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
回复 支持 反对

使用道具 举报

douya 发表于 2015-9-22 07:05:17 | 显示全部楼层
stellari 发表于 2015-9-21 13:04
这个是通不过的。如果List中所有的Iterator都为空,那么第一次调用hasNext()会返回什么?应该返回什么?
...

有道理!我去改改,多谢!多谢!
回复 支持 反对

使用道具 举报

uuuouou 发表于 2015-9-22 10:36:38 | 显示全部楼层
谢lz面经,分享个第二题C++的solution
  1. #include <iostream>
  2. #include <vector>
  3. #include <utility> 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
  4. #include <list>
  5. using namespace std;

  6. class InterleavingIterator{
  7. private:
  8.         typedef vector<int>::const_iterator CI;
  9.         typedef pair<CI, CI> Cursor;
  10.         typedef list<Cursor>::iterator Iter;
  11. private:
  12.         list<Cursor> cursorList;.鏈枃鍘熷垱鑷1point3acres璁哄潧
  13.         Iter         iter;
  14. public:
  15.         InterleavingIterator(const vector<vector<int> >& arrays){
  16.                 for(int i = 0; i < arrays.size(); ++i){
  17.                         if(!arrays[i].empty()){. 1point 3acres 璁哄潧
  18.                                 cursorList.push_back(Cursor(arrays[i].begin(), arrays[i].end())); 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
  19.                         }
  20.                 }
  21.                 iter = cursorList.begin();. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  22.         }
  23.         bool hasNext()const{
  24.                 return !cursorList.empty();
  25.         }
  26.         int next(){
  27.                 int x = *(*iter).first++;
  28.                 if((*iter).first == (*iter).second){
  29.                         iter = cursorList.erase(iter);
  30.                 }
  31.                 else{
  32.                         ++iter;
  33.                 }
  34.                 if(iter == cursorList.end()) iter = cursorList.begin();
  35.                 return x;
  36.         }
  37. };. From 1point 3acres bbs

  38. int main()
  39. {
  40.         int a[] = {1, 2, 3};. more info on 1point3acres.com
  41.         int b[] = {4, 5, 6};
  42.         int c[] = {7, 8};

  43.         vector<vector<int> > arrays;. from: 1point3acres.com/bbs
  44.         arrays.push_back(vector<int>(a, a + sizeof(a)/sizeof(int)));
  45.         arrays.push_back(vector<int>(b, b + sizeof(b)/sizeof(int)));
  46.         arrays.push_back(vector<int>(c, c + sizeof(c)/sizeof(int)));

  47.         InterleavingIterator iter(arrays);
  48.         while(iter.hasNext()){
  49.                 cout << iter.next() << " ";
  50.         }

  51.         return 0;. more info on 1point3acres.com
  52. }
复制代码
回复 支持 反对

使用道具 举报

uuuouou 发表于 2015-9-22 10:57:52 | 显示全部楼层
额,修改一下,可能看起来更舒服些
  1. #include <iostream>
  2. #include <vector>
  3. #include <utility>. From 1point 3acres bbs
  4. #include <list>
  5. using namespace std;

  6. class Cursor{. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  7.         typedef vector<int>::const_iterator CI;
  8. private:
  9.         CI cur, end;. more info on 1point3acres.com
  10. public:. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
  11.         Cursor(const vector<int>& arr){
  12.                 cur = arr.begin();
    . Waral 鍗氬鏈夋洿澶氭枃绔,
  13.                 end = arr.end();
  14.         }
  15.         bool hasNext()const{
  16.                 return cur != end;
  17.         }
  18.         int next(){. from: 1point3acres.com/bbs
  19.                 return *cur++;
  20.         }
  21. };
  22. . Waral 鍗氬鏈夋洿澶氭枃绔,
  23. class InterleavingIterator{
  24.         typedef list<Cursor>::iterator Iter;
  25. private:-google 1point3acres
  26.         list<Cursor> cursorList;
  27.         Iter         iter;
  28. public:
  29.         InterleavingIterator(const vector<vector<int> >& arrays){
  30.                 for(int i = 0; i < arrays.size(); ++i){
  31.                         if(!arrays[i].empty()){
  32.                                 cursorList.push_back(Cursor(arrays[i]));
  33.                         }
  34.                 }
  35.                 iter = cursorList.begin();
  36.         }
  37.         bool hasNext()const{
  38.                 return !cursorList.empty();
  39.         }. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
  40.         int next(){.鐣欏璁哄潧-涓浜-涓夊垎鍦
  41.                 int x = (*iter).next();
  42.                 if((*iter).hasNext()){
  43.                         ++iter;
  44.                 }
  45.                 else{
  46.                         iter = cursorList.erase(iter);
  47.                 }. From 1point 3acres bbs
  48.                 if(iter == cursorList.end()) iter = cursorList.begin();
  49.                 return x;
  50.         }
  51. };
    . 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷

  52. int main()
  53. {
  54.         int a[] = {1, 2, 3};.鏈枃鍘熷垱鑷1point3acres璁哄潧
  55.         int b[] = {4, 5, 6};
  56.         int c[] = {7, 8};. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴

  57.         vector<vector<int> > arrays;. 鍥磋鎴戜滑@1point 3 acres
  58.         arrays.push_back(vector<int>(a, a + sizeof(a)/sizeof(int)));. 鍥磋鎴戜滑@1point 3 acres
  59.         arrays.push_back(vector<int>(b, b + sizeof(b)/sizeof(int)));
  60.         arrays.push_back(vector<int>(c, c + sizeof(c)/sizeof(int)));. visit 1point3acres.com for more.

  61.         InterleavingIterator iter(arrays);
  62.         while(iter.hasNext()){
  63.                 cout << iter.next() << " ";. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
  64.         }
  65. . 鍥磋鎴戜滑@1point 3 acres
  66.         return 0;
  67. }
复制代码
回复 支持 反对

使用道具 举报

stellari 发表于 2015-9-22 13:10:39 | 显示全部楼层
uuuouou 发表于 2015-9-22 10:57. more info on 1point3acres.com
额,修改一下,可能看起来更舒服些

感谢分享!不过我觉得InterleavingIterator最好是能继承自一个Iterator接口(在C++中是纯虚类)。cursorList不是list<Cursor>类型,而是list<Iterator*>(因为传进来的参数就是list<Iterator*>),这样的好处是:具有Iterator接口的InterleavingIterator本身又可以被其他Iterator包装,因此可以轻松实现各种Iterator方式的组合。比如InterleavingIterator被EvenIterator(只返回偶数的Iterator)包装的话,就能够实现“以Interleaving方式取数字,但是要隔一行取一个这种方式”。然后你再跟面试官说一句,“Essentially I just implemented the Decorator Pattern”,他可能就会觉得你很懂OO设计了。
回复 支持 反对

使用道具 举报

uuuouou 发表于 2015-9-22 16:45:51 | 显示全部楼层
stellari 发表于 2015-9-22 13:10. Waral 鍗氬鏈夋洿澶氭枃绔,
感谢分享!不过我觉得InterleavingIterator最好是能继承自一个Iterator接口(在C++中是纯虚类)。cursorL ...

很有道理的会说,感谢指点~
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

custom counter

GMT+8, 2017-9-26 15:53

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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