美国卖车经历分享

一亩三分地论坛

 找回密码
 Sign Up 注册获取更多干货
H1B/绿卡遥遥无期
又不想回国
来东南亚最大的互联网集团工作?
码农求职神器Triplebyte:
不用海投
内推多家公司面试
坐标湾区
Games Startup
招聘游戏开发工程师
游戏初创公司招聘工程师、UIUX Designer和游戏策划
查看: 3950|回复: 24
收起左侧

Google 面经 直接上题

[复制链接] |试试Instant~ |关注本帖
我的人缘0
009hsq 发表于 2016-5-22 09:34:30 | 显示全部楼层 |阅读模式
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】

2016(4-6月) 码农类General 硕士 全职@Google - 网上海投 - 技术电面  | Fail | fresh grad应届毕业生

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

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

x
1.   Create a method toreturn a unique collection of <count> random Integers between 0 and <maxValue>(exclusive of maxValue).
2.Create a filterediterator that skips over nulls. Create a class that implements iterator, takesanother iterator in its constructor.  Your class iterates through theother iterator except for cases where the initial iterator has a null value. In this case your iterator skips over the null and treats it as if it didnot exist.
example:
sourceIterator= ‘a’, null, ‘b’
sourceIterator.hasNext()= true
sourceIterator.next()= ‘a’
sourceIterator.hasNext()= true
sourceIterator.next()= null
sourceIterator.hasNext()= true
sourceIterator.next()= ‘b’
sourceIterator.hasNext()= false
yourIterator= new yourIterator(sourceIterator)
yourIterator.hasNext()= true
yourIterator.next()= ‘a’
yourIterator.hasNext()= true
yourIterator.next()= ‘b’

yourIterator.hasNext()= false

评分

参与人数 1大米 +30 萝卜 +4 收起 理由
nunuh89 + 30 + 4

查看全部评分


上一篇:palantir 电面
下一篇:Cypress semiconductor 底特律 onsite
我的人缘0
yueliu2366 发表于 2016-5-22 10:30:27 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
感谢楼主分享。第一题不太理解题意,能否举个例子说明一下呢?
第二题自己练习一下:. 围观我们@1point 3 acres
class yourIterator implements Iterator<E> {
        Iterator<E> it;. Waral 博客有更多文章,
        E nextElem;
        public yourIterator(Iterator<E> sourceIterator) {
.留学论坛-一亩-三分地            this.it = sourceIterator;
            this.nextElem = null;
        }

        @Override
        public Integer next() {
            return nextElem;
        }
来源一亩.三分地论坛.
        @Override
        public boolean hasNext() {
            while(it.hasNext()) {
                nextElem = it.next();
                if (nextElem != null) {
                    return true;
                }. Waral 博客有更多文章,
            }
            return false;. 一亩-三分-地,独家发布
        }
}
回复 支持 反对

使用道具 举报

我的人缘0
nevets 发表于 2016-5-22 10:50:10 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
第一题的意思是高效生成0-n中不重复的随机数。由于随机数是随机的,所以到了后期很有可能会产生重复的随机数。最简单的是用一个hashmap来判重,每生成一个元素放hashmap里,如果hashmap里有这个元素就重新生成。这样非常没有效率,因为如果n比较大,后期很可能直接循环到死都出不来。有一个比较好的办法是用knuth shuffle (aka Fisher–Yates shuffle),这样也能保证等概率。
回复 支持 反对

使用道具 举报

我的人缘0
wtcupup 发表于 2016-5-22 11:00:44 | 显示全部楼层
  此人我要顶:
 
11% (0) 【我投】
  此人我要踩:
 
89% (9) 【我投】
yueliu2366 发表于 2016-5-22 10:30
感谢楼主分享。第一题不太理解题意,能否举个例子说明一下呢?
第二题自己练习一下:. visit 1point3acres for more.
class yourIterator ...

你这个代码有个问题啊 第一次youiterator call next 应该return a,但是你return了null
回复 支持 反对

使用道具 举报

我的人缘0
yueliu2366 发表于 2016-5-22 11:38:32 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
wtcupup 发表于 2016-5-22 11:00.留学论坛-一亩-三分地
你这个代码有个问题啊 第一次youiterator call next 应该return a,但是你return了null
. from: 1point3acres
我代码第一次call会返回a啊,过程是这样的:
yourIterator= new yourIterator(sourceIterator)
yourIterator.hasNext()= true
yourIterator.next()= ‘a’. from: 1point3acres

为什么你认为会返回null呢?还是我没理解你的意思?
回复 支持 反对

使用道具 举报

我的人缘0
wtcupup 发表于 2016-5-22 11:47:13 | 显示全部楼层
  此人我要顶:
 
11% (0) 【我投】
  此人我要踩:
 
89% (9) 【我投】
yueliu2366 发表于 2016-5-22 11:38
我代码第一次call会返回a啊,过程是这样的:. 留学申请论坛-一亩三分地
yourIterator= new yourIterator(sourceIterator)
yourIte ...

是不是可以直接
yourIterator= new yourIterator(sourceIterator)
yourIterator.next()= ‘a’
来源一亩.三分地论坛.
不用在之间hasNext呢?
回复 支持 反对

使用道具 举报

我的人缘0
yueliu2366 发表于 2016-5-22 12:11:07 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
wtcupup 发表于 2016-5-22 11:47.本文原创自1point3acres论坛
是不是可以直接. visit 1point3acres for more.
yourIterator= new yourIterator(sourceIterator)
yourIterator.next()= ‘a’

我的看法是不能这样吧,要调用yourIterator.next()之前不是都需要先调用yourIterator.hasNext()吗? lc里面都是这样的,不清楚这题是怎么样的考法。
回复 支持 反对

使用道具 举报

我的人缘0
ccrjohn8787 发表于 2016-5-22 21:25:24 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
yueliu2366 发表于 2016-5-22 10:30
感谢楼主分享。第一题不太理解题意,能否举个例子说明一下呢?
第二题自己练习一下:. from: 1point3acres
class yourIterator ...

如果多次调用hasNext() before call next(), 会出问题,好多sourceIterator 的数字会被skip
Mobile Apps Category (English)728x90
回复 支持 反对

使用道具 举报

我的人缘0
Altynai 发表于 2016-5-22 21:26:06 | 显示全部楼层
  此人我要顶:
 
100% (8) 【我投】
  此人我要踩:
 
0% (0) 【我投】
第一题是不是就是pseudo-random number generators问题

可以参考:http://preshing.com/20121224/how-to-generate-a-sequence-of-unique-random-integers/
回复 支持 反对

使用道具 举报

我的人缘0
ccrjohn8787 发表于 2016-5-22 21:26:46 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
yueliu2366 发表于 2016-5-22 10:30. from: 1point3acres
感谢楼主分享。第一题不太理解题意,能否举个例子说明一下呢?
第二题自己练习一下:
class yourIterator ...

加一个boolean flag来表示hasNext()之后next() 有没有被调用就行
回复 支持 反对

使用道具 举报

我的人缘0
 楼主| 009hsq 发表于 2016-5-22 21:37:51 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
第一题能直接用java 里的random method
回复 支持 反对

使用道具 举报

我的人缘0
yueliu2366 发表于 2016-5-22 21:47:31 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
ccrjohn8787 发表于 2016-5-22 21:26
加一个boolean flag来表示hasNext()之后next() 有没有被调用就行

你说的没错,多谢指正! 还有种方法就是修改下hasNext也可以,在刚开始的时候判断下nextElem是不是为null
@Override
        public boolean hasNext() {

            while(it.hasNext()) {
                nextElem = it.next();
                if (nextElem != null) {
                    return true;
                }
            }
            return false;
        }
回复 支持 反对

使用道具 举报

我的人缘0
yueliu2366 发表于 2016-5-22 21:50:10 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
yueliu2366 发表于 2016-5-22 21:47
你说的没错,多谢指正! 还有种方法就是修改下hasNext也可以,在刚开始的时候判断下nextElem是不是为null ...

不小心按了发送了。。没打完
@Override
        public boolean hasNext() {. From 1point 3acres bbs
            if (nextElem != null) {
              return true;. from: 1point3acres
            }
            while(it.hasNext()) {.1point3acres网
                nextElem = it.next();
                if (nextElem != null) {
                    return true;
                }
            }
            return false;
        }.1point3acres网
顺便问下,在调用next前可以多次调用hasNext,但是在调用next前,肯定是保证hasNext至少被调用过一次的吧?我的意思是,test case不需要考虑直接调用next而没有在之前调用hasNext的情况吧?
回复 支持 反对

使用道具 举报

我的人缘0
ccrjohn8787 发表于 2016-5-22 22:45:48 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
yueliu2366 发表于 2016-5-22 21:50
不小心按了发送了。。没打完
@Override
        public boolean hasNext() {

对,要不然就break contract 了
回复 支持 反对

使用道具 举报

我的人缘0
xiaoyujiang 发表于 2016-5-24 00:44:26 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
yueliu2366 发表于 2016-5-22 21:50
不小心按了发送了。。没打完
@Override
        public boolean hasNext() {

可以解释一下为什么一开始的代码有问题么?
回复 支持 反对

使用道具 举报

我的人缘0
xiaoyujiang 发表于 2016-5-24 01:00:36 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
yueliu2366 发表于 2016-5-22 21:50-google 1point3acres
不小心按了发送了。。没打完
@Override
        public boolean hasNext() {

意思是只要不call next()一直call hasNex()的话就一直返回true?
回复 支持 反对

使用道具 举报

我的人缘0
yueliu2366 发表于 2016-5-24 01:00:50 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
xiaoyujiang 发表于 2016-5-24 00:44.本文原创自1point3acres论坛
可以解释一下为什么一开始的代码有问题么?

如果按照正常顺序,先调用一次hasNext(),在调用一次next(),如此循环直到结束。这样是没问题的。但是如果有人先调用hasNext()多次,再调用next(),就会出错。举个例子,假如本来的list是{a, b, c}, 然后有人调用了两次hasNext(), 接着调用next(),这时候会返回b,而实际上时候应该返回的是a才对,不能因为调用了hasNext,就影响了结果。修改后的代码应该是:
class yourIterator implements Iterator<E> {
        Iterator<E> it;
        E nextElem;. 1point3acres
        public yourIterator(Iterator<E> sourceIterator) {
            this.it = sourceIterator;
            this.nextElem = null;
        }
. 围观我们@1point 3 acres
        @Override
        public Integer next() {-google 1point3acres
            E temp = nextElem;
            nextElem = null

            return E;
        }
. 一亩-三分-地,独家发布
        @Override
        public boolean hasNext() {
          if (nextElem != null) {
             return true;
           }

            while(it.hasNext()) {.留学论坛-一亩-三分地
                nextElem = it.next();
                if (nextElem != null) {
                    return true;
                }
            }
            return false;
        }.留学论坛-一亩-三分地
}
回复 支持 反对

使用道具 举报

我的人缘0
yueliu2366 发表于 2016-5-24 01:09:20 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
xiaoyujiang 发表于 2016-5-24 01:00
意思是只要不call next()一直call hasNex()的话就一直返回true?

不是,原来代码是这样:
public boolean hasNext() {
            while(it.hasNext()) {. 1point3acres
                nextElem = it.next();
                if (nextElem != null) {
                    return true;.本文原创自1point3acres论坛
                }
            }
            return false;. 1point 3acres 论坛
        }-google 1point3acres

假如list是{a,b,c}。 那么正常调用顺序是:
if(hasNext()) print(next())---------输出a
if(hasNext()) print(next())---------输出b.1point3acres网
if(hasNext()) print(next())---------输出c

现在假如不这么调用了,变成:
if(hasNext())---------没有输出,但是此时nextElem = a
if(hasNext()) print(next())---------这次调用hasNext会先执行nextElem = b,然后输出b,这样就不对了啊,应该输出a才对,因为a还没输出就被跳过了
回复 支持 反对

使用道具 举报

我的人缘0
xiaoyujiang 发表于 2016-5-24 01:28:21 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
yueliu2366 发表于 2016-5-24 01:00
如果按照正常顺序,先调用一次hasNext(),在调用一次next(),如此循环直到结束。这样是没问题的。但是如果 ...

谢谢回复!但是我怎么觉得这样implement hasNext的话结果会错。比如list是{a,null,null},第一次调用hasNext之后nextElem被赋成a,再第二次调用hasNext的时候因为nextElem!=null,return值是true,但是因为a之后全是null,return值应该为false才对
回复 支持 反对

使用道具 举报

我的人缘0
lusong 发表于 2016-5-24 01:29:41 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
IMHO, cache the next one in the constructor and next() to make hasNext() simpler.
来源一亩.三分地论坛.
  1.    class YourIterator <E> implements Iterator<E> {
  2.         private final Iterator<E> it;
  3.         E nextElem;
  4.         public YourIterator(Iterator<E> sourceIterator) {
  5.             this.it = sourceIterator;
  6.             getNext();
  7.         }

  8.         private void getNext(){
  9. . From 1point 3acres bbs
  10.             nextElem=null;
  11.             while (it.hasNext()){
  12.                 nextElem=it.next();
  13.                 if (nextElem!=null){
  14.                     break;
  15.                 }
  16.             }

  17.         }

  18.         @Override
  19.         public E next() {
  20.             E toBeReturn = nextElem;
    . from: 1point3acres
  21.             getNext();. 留学申请论坛-一亩三分地
  22.             return toBeReturn;
  23.         }

  24.         @Override
  25.         public boolean hasNext() {
  26.             return nextElem!=null;
  27.         }
  28.     }
复制代码
回复 支持 反对

使用道具 举报

游客
请先登录

本版积分规则

提醒:发帖可以选择内容隐藏,部分板块支持匿名发帖。请认真读完以下全部说明:

■隐藏内容方法: [hide=200]你想要隐藏的内容比如面经[/hide]
■意思是:用户积分低于200则看不到被隐藏的内容
■可以自行设置积分值,不建议太高(200以上太多人看不到),也不建议太低(那就没必要隐藏了)
■建议只隐藏关键内容,比如具体的面试题目、涉及隐私的信息,大部分内容没必要隐藏。
■微信/QQ/电子邮件等,为防止将来被骚扰甚至人肉,以论坛私信方式发给对方最安全。
■匿名发帖的板块和方法:http://www.1point3acres.com/bbs/thread-405991-1-1.html

关闭

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

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

custom counter

GMT+8, 2018-6-21 10:47

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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