avatar
service request ?# Immigration - 落地生根
b*s
1
昨天onsite完的,趁还记得上来写一下,面的不好,求bless。
一轮店面
第一题判断一个string的开头第一个字母是不是大写,两行代码就能写完,没有任何陷
阱。第二题让我用Java(因为我本来用python)写判断binary tree是不是bst。两个题
都很简单,然后还让我说一下自己做过的最challenging的一个project,整个面试不到
二十分钟就说问完了问我还有没有问题,我连忙问他为什么这么快是不是我什么地方做
错了他不愿继续问下去。答曰他在G工作七年多面了不下一百人,十分清楚哪些人去
onsite不是在浪费他们engineer的时间,觉得我没有问题。。。
过了一周果然hr说去onsite,由于我所在的城市有G的office,所以去那里面,早上三
轮然后吃午餐,下午再两轮,一共五轮
第一轮
给一个矩阵,每个格子上有三种可能,空房,阻碍物或者是保安,阻碍物不能进,空房
四个方向都能进,要写代码给每个空房标记其离最近的保安的距离,比如
000
BGG
B00
B表示障碍物,G表示保安,0表示空房,应该标记为
211
BGG
B11
我说扫一遍矩阵,然后遇到每个G就bfs整个矩阵, 他说不是optimal,optimal可以做到
O(N^2)。当时想不出,他说那就先按我那个想法写代码。写完就到时间了。后来回家后
就想到optimal的解法了,对所有G一起开始bfs就可以了。
第二轮
写一个函数生成满足下面三个条件的integer
1. 非负
2. 不能有重复数字
3. 递增,既后面产生的比前面产生的要大
我问要一次性全部生成所有数字还是每呼叫一次函数产生一个,他让我先写一次性产生
全部的,这个不难,backtracking,follow up是假设现在给一个符合条件的数字,如
789,返回下一个(比输入大但是最小的)数字,790。一开始我没思路,说很多edge
case,然后多观察几个例子后发现有些规律,说出来后他说看起来不错,然后举了几个
例子让我模拟跑一遍,没有问题,他说ok,不用写code了,正好也到时间了
第三轮
问了一个Java的问题
假设有两个class,A和B,B是A的子类,
先有下面几句
A a = new A();
B b = new B();
List la = new List();
List lb = new List();
(反正就是建了A,B的各一个instance,list of A 和 list of B 各一个instance)
然后问下面四句哪句能过compiler,哪句不能:
a = b;
b = a;
la = lb;
lb = la;
答案是只有第一句能过,我一开始答1和3能过(我真心不熟Java,python里面的话啥能
过啊亲)。
然后出了一道python generator的题,写代码,还有follow up,也要写代码,最后都
超出时间了。
中午吃饭, 下午接着面
第四轮
问我知不知道zip文件,我说用过但不知原理。他就说我们来讨论一下
假设一个文件压缩后的表示是
#3, #5, #6, 2 5, #8...
”#k“形式的代表这个数字k,两个数字“i j”形式的代表取前 i 个
数字做 j 长的 circular重复,像上面那个表示,前面3个都是表示单个数字,
然后 2 5表示取前2个数字 (既56),组成5个数字,不够的从头再取,所以就是56565
最后上面解压缩后应该为
3, 5, 6, 5, 6, 5, 6, 5, 8...
要我写的是压缩算法的代码。
我提出从头扫,一边一边用hashtable记下见过的number,每前进一位就检查hashtable
有没有符合当前数字模式的number出现过,然后他说还不错,写代码。一边写一边出现
bug,一边发现很多写代码前没考虑的东西,最后勉强算写完,时间也到了,他说这个
他也没写过,是在一篇paper上看到的算法,原算法跟我的有些不同,倒是都用了
hashtable。。。
第五轮
拿着我简历进来,说有人跟你谈过你的简历吗,我说没有,他表示万分惊讶,然后在我
简历上挑了一个research project让我说说,说完后用c++出了一个题,一个cipher类
,有一个member function是对输入加密,加密方法为对input的每16个Byte和一个
increasing counter做xor,这个increasing counter也是有16Byte,从00..01(前
15Byte都是0,最后1Byte是1)开始,还有一个要求,举例说:
第一个input 有20个Byte,前16个Byte就和00..01做xor,后4个Byte和00..02的前
4Byte做xor
然后之后再对第二个input加密的时候,对这个input的前12Byte用00..02的后12Byte(
即11个Byte 0,1个Byte 1)
然后让我写这个class
我问了一句要是couter的数用完了怎么办,他反问我这个counter有16Byte,多久会用
完。因为已经很累了,算错了好几次,中途我还说16乘以8等于64。。。反正在他逼迫
下我硬着头皮模拟算了一下,得出结果就是很久很久很久才会用完,不用担心。然后又
因为好久没写c或c++,还有真的很累,脑袋一片发麻,茫然不知如何下手,他看不下去
了就说那你就写一个能从小到大生成这个counter能表示的所有integer的函数吧,你要
对python熟一点的话就用Python,这个写完后有两个小bug,迅速改正过来,然后就到
时间了。问我还有没有问题,我就随便问了一下这个office有哪些project,然后就结
束了。
总算写完了,反正总结下来自己coding还是太差了,慢且buggy。希望大家bless一下然
后有奇迹发生吧。
avatar
j*g
2
说15天给答复,是指15calendar day 还是business day呢?谢谢
avatar
g*i
3
祝福楼主!等你的好消息update!
我下周也要面g的电面了
avatar
w*f
4
I think it's calendar day.
avatar
n*g
5
加油。

【在 b*********s 的大作中提到】
: 昨天onsite完的,趁还记得上来写一下,面的不好,求bless。
: 一轮店面
: 第一题判断一个string的开头第一个字母是不是大写,两行代码就能写完,没有任何陷
: 阱。第二题让我用Java(因为我本来用python)写判断binary tree是不是bst。两个题
: 都很简单,然后还让我说一下自己做过的最challenging的一个project,整个面试不到
: 二十分钟就说问完了问我还有没有问题,我连忙问他为什么这么快是不是我什么地方做
: 错了他不愿继续问下去。答曰他在G工作七年多面了不下一百人,十分清楚哪些人去
: onsite不是在浪费他们engineer的时间,觉得我没有问题。。。
: 过了一周果然hr说去onsite,由于我所在的城市有G的office,所以去那里面,早上三
: 轮然后吃午餐,下午再两轮,一共五轮

avatar
f*e
6
感觉很水。

【在 b*********s 的大作中提到】
: 昨天onsite完的,趁还记得上来写一下,面的不好,求bless。
: 一轮店面
: 第一题判断一个string的开头第一个字母是不是大写,两行代码就能写完,没有任何陷
: 阱。第二题让我用Java(因为我本来用python)写判断binary tree是不是bst。两个题
: 都很简单,然后还让我说一下自己做过的最challenging的一个project,整个面试不到
: 二十分钟就说问完了问我还有没有问题,我连忙问他为什么这么快是不是我什么地方做
: 错了他不愿继续问下去。答曰他在G工作七年多面了不下一百人,十分清楚哪些人去
: onsite不是在浪费他们engineer的时间,觉得我没有问题。。。
: 过了一周果然hr说去onsite,由于我所在的城市有G的office,所以去那里面,早上三
: 轮然后吃午餐,下午再两轮,一共五轮

avatar
t*7
7
感谢楼主分享,下礼拜电面,紧张ING。。。本人去年12月PHD毕业,专业方向DATA
MINING AND MACHINE LEARNING,搬到湾区找工作,OPT快开始了,目前还没着落,希望
能和一起在湾区找工作的同学多多交流互通信息。毕业前没时间准备现在着急了。。。
平常MATLAB写得多,JAVA最近才开始练习。。。
把电面的两个题写了一下,请拍
第一题
public boolean judgeCapital(String inputString) {

//
if ((inputString==null) || (inputString.length() == 0)) {

return false;
}



// get the first character
char firstChar = inputString.charAt(0);

//
if ((firstChar >='A') && (firstChar <= 'Z')) {

return true;

}else {

return false;
}

}
第二题 :
public boolean recCheckBST(TaoNode rootNode) {

// check current node
if (rootNode.isLeaf()) {

return true;

}else if ((rootNode.getLeftChild()!=null) && (rootNode.getRightChild
()!=null)) {

if ((rootNode.getLeftChild().getValue()<=rootNode.getValue()) &&
(rootNode.getRightChild().getValue()>=rootNode.getValue()) && (this.
recCheckBST(rootNode.getLeftChild())) && (this.recCheckBST(rootNode.
getRightChild()))) {

return true;

}else {

return false;

}

} else if ((rootNode.getLeftChild()!=null) && (rootNode.
getRightChild()==null)) {

if ((rootNode.getLeftChild().getValue()<=rootNode.getValue()) &&
(this.recCheckBST(rootNode.getLeftChild()))) {

return true;

}else {

return false;
}



} else {

if ((rootNode.getRightChild().getValue()>=rootNode.getValue()) &
& (this.recCheckBST(rootNode.getRightChild()))) {

return true;

}else {

return false;
}


}

}

【在 b*********s 的大作中提到】
: 昨天onsite完的,趁还记得上来写一下,面的不好,求bless。
: 一轮店面
: 第一题判断一个string的开头第一个字母是不是大写,两行代码就能写完,没有任何陷
: 阱。第二题让我用Java(因为我本来用python)写判断binary tree是不是bst。两个题
: 都很简单,然后还让我说一下自己做过的最challenging的一个project,整个面试不到
: 二十分钟就说问完了问我还有没有问题,我连忙问他为什么这么快是不是我什么地方做
: 错了他不愿继续问下去。答曰他在G工作七年多面了不下一百人,十分清楚哪些人去
: onsite不是在浪费他们engineer的时间,觉得我没有问题。。。
: 过了一周果然hr说去onsite,由于我所在的城市有G的office,所以去那里面,早上三
: 轮然后吃午餐,下午再两轮,一共五轮

avatar
m*l
8
好详细的面经 bless楼主!
avatar
x*g
9
第二题思路不对吧.你貌似只顾当前节点满足>左,比方说:
4
/ \
2 5
/ \ /
1 6 3
判不出6,3都有问题?呵呵.
另抱歉说一句,即使结果正确,这个code也表现的凌乱.
加油练习哦.

【在 t*******7 的大作中提到】
: 感谢楼主分享,下礼拜电面,紧张ING。。。本人去年12月PHD毕业,专业方向DATA
: MINING AND MACHINE LEARNING,搬到湾区找工作,OPT快开始了,目前还没着落,希望
: 能和一起在湾区找工作的同学多多交流互通信息。毕业前没时间准备现在着急了。。。
: 平常MATLAB写得多,JAVA最近才开始练习。。。
: 把电面的两个题写了一下,请拍
: 第一题
: public boolean judgeCapital(String inputString) {
:
: //
: if ((inputString==null) || (inputString.length() == 0)) {

avatar
T*e
10
哇,好多下周G家店面的,我也凑个热闹~~ 祝福大家~
avatar
r*c
11
第二题
public boolean recCheckBST(TreeNode node, int upperBound, int lowerBound) {
if (node == null) {
return true;
}
if (node.val <= upperBound && node.val >=lowerBound) {
return recCheckBst(node.left, root.val, lowerBound) && recCheckBst(node
.right, upperBound, rootNode.Val);
}
}
public boolean checkBst(TreeNode root) {
if (root == null) {
// ask the interviewer what should return;
return recCheckBst(root, Long.MAX, Long.MIN);
}
avatar
r*c
12
zip file没看懂,为什么用hash
array不行么
avatar
t*7
13
感谢回复,那兄弟对这个题有啥建议?

【在 x****g 的大作中提到】
: 第二题思路不对吧.你貌似只顾当前节点满足>左,: 比方说:
: 4
: / \
: 2 5
: / \ /
: 1 6 3
: 判不出6,3都有问题?呵呵.
: 另抱歉说一句,即使结果正确,这个code也表现的凌乱.
: 加油练习哦.

avatar
t*7
14
高手

lowerBound) {
recCheckBst(node

【在 r****c 的大作中提到】
: 第二题
: public boolean recCheckBST(TreeNode node, int upperBound, int lowerBound) {
: if (node == null) {
: return true;
: }
: if (node.val <= upperBound && node.val >=lowerBound) {
: return recCheckBst(node.left, root.val, lowerBound) && recCheckBst(node
: .right, upperBound, rootNode.Val);
: }
: }

avatar
g*g
16
电面2似乎本版讨论过几次了,我还贴过code。基本就是 high和low boundary一次遍历。
onsite 1: 楼主回家后的思路是对的
onsite 2:
1)前->末遍历 记录到目前位置,使用过的 digit
2)末->前遍历 对每一个数字,查找是否存在,大于自己切未使用的数字,如找到,
break
如果2)到了头,且头是9,需要进位
3) 从break的位置开始-》末遍历,依次选取最小且未使用的数字
string next(string input)
{
int n = input.size();
vector v(10, 0);
// step 1: set used digits
for(int i=0; i{
v[input[i]-'0'] = 1;
}

// step 2: find bigger unused digit at cur pos
int i= n-1;
for(i=n-1; i>=0; i--)
{
int j = (input[i] - '0');
int k = j+1;

// clear
v[j] = 0;

for(;k<=9 && v[k] == 1; k++)
{}

// found possible pos, break
if (k<=9)
{
v[k] = 1;
break;
}
}
string str = "";
// step 2, till front, and still no valid pos example: "987"
// next should be: "1023"
if (i == -1)
{
str = "1";
v[1] = 1;
}
// step 3.1 copy first digits
for(int j=0; j<=i; j++)
{
str += input[j];
}

// step 3.2: set correct smallest and increasing digits from break
position
for(++i; i{
bool succ=false;
for(int j=0; j<=9; j++)
{
if (v[j] == 0)
{
str += '0' + j;
v[j] = 1;
succ = true;
break;
}
}
// case: 9876543210, no possible solution, return ""
if (!succ)
{
return "";
}
}
return str;
}

【在 b*********s 的大作中提到】
: 昨天onsite完的,趁还记得上来写一下,面的不好,求bless。
: 一轮店面
: 第一题判断一个string的开头第一个字母是不是大写,两行代码就能写完,没有任何陷
: 阱。第二题让我用Java(因为我本来用python)写判断binary tree是不是bst。两个题
: 都很简单,然后还让我说一下自己做过的最challenging的一个project,整个面试不到
: 二十分钟就说问完了问我还有没有问题,我连忙问他为什么这么快是不是我什么地方做
: 错了他不愿继续问下去。答曰他在G工作七年多面了不下一百人,十分清楚哪些人去
: onsite不是在浪费他们engineer的时间,觉得我没有问题。。。
: 过了一周果然hr说去onsite,由于我所在的城市有G的office,所以去那里面,早上三
: 轮然后吃午餐,下午再两轮,一共五轮

avatar
b*s
17

历。
嗯 onsite2那题我当时也是这么回答的 他挺满意

【在 g*****g 的大作中提到】
: 电面2似乎本版讨论过几次了,我还贴过code。基本就是 high和low boundary一次遍历。
: onsite 1: 楼主回家后的思路是对的
: onsite 2:
: 1)前->末遍历 记录到目前位置,使用过的 digit
: 2)末->前遍历 对每一个数字,查找是否存在,大于自己切未使用的数字,如找到,
: break
: 如果2)到了头,且头是9,需要进位
: 3) 从break的位置开始-》末遍历,依次选取最小且未使用的数字
: string next(string input)
: {

avatar
c*0
18
第一轮应该是用DP。扫两遍,第一遍从头到尾。第二遍倒过来扫。
如果用DFS,复杂度就不能保证是N^2了。
void findDistance(vector > &block){
if(block.empty()) return;
int row = block.size(), col = block[0].size();
for(int i=0; ifor(int j=0; jif(block[i][j] == 'B' || block[i][j] == 'G')
continue;

int step = '0';
if(i>0 && block[i-1][j] != 'B' && block[i-1][j] != '0')
step = (block[i-1][j] == 'G')? '1' : block[i-1][j]+1;
if(j>0 && block[i][j-1] != 'B' && block[i][j-1] != '0'){
if(step == '0') step = (block[i][j-1] == 'G')? '1' : block[i
][j-1]+1;
else step = min(step, (block[i][j-1] == 'G')? '1' : block[i]
[j-1]+1);
}
if(block[i][j] != '0')
step = min(step, block[i][j]+0);
block[i][j] = step;
}
}
for(int i=row-1; i>=0; i--){
for(int j=col-1; j>=0; j--){
if(block[i][j] == 'B' || block[i][j] == 'G')
continue;
int step = '0';
if(istep = (block[i+1][j] == 'G')? '1' : block[i+1][j]+1;
if(jif(step == '0') step = (block[i][j+1] == 'G')? '1' : block[i
][j+1]+1 ;
else step = min(step, (block[i][j+1] == 'G')? '1' : block[i]
[j+1]+1);
}
if(block[i][j] != '0') step = min(step, block[i][j]+0);
block[i][j] = step;
}
}
}

【在 b*********s 的大作中提到】
: 昨天onsite完的,趁还记得上来写一下,面的不好,求bless。
: 一轮店面
: 第一题判断一个string的开头第一个字母是不是大写,两行代码就能写完,没有任何陷
: 阱。第二题让我用Java(因为我本来用python)写判断binary tree是不是bst。两个题
: 都很简单,然后还让我说一下自己做过的最challenging的一个project,整个面试不到
: 二十分钟就说问完了问我还有没有问题,我连忙问他为什么这么快是不是我什么地方做
: 错了他不愿继续问下去。答曰他在G工作七年多面了不下一百人,十分清楚哪些人去
: onsite不是在浪费他们engineer的时间,觉得我没有问题。。。
: 过了一周果然hr说去onsite,由于我所在的城市有G的office,所以去那里面,早上三
: 轮然后吃午餐,下午再两轮,一共五轮

avatar
c*l
19
if (node.val <= upperBound && node.val >=lowerBound) {
return recCheckBst(node.left, root.val, lowerBound) && recCheckBst(node
.right, upperBound, rootNode.Val);
}
你这后面漏了一句“return false;”

node

【在 r****c 的大作中提到】
: 第二题
: public boolean recCheckBST(TreeNode node, int upperBound, int lowerBound) {
: if (node == null) {
: return true;
: }
: if (node.val <= upperBound && node.val >=lowerBound) {
: return recCheckBst(node.left, root.val, lowerBound) && recCheckBst(node
: .right, upperBound, rootNode.Val);
: }
: }

avatar
A*c
20
多谢,bless!

【在 b*********s 的大作中提到】
: 昨天onsite完的,趁还记得上来写一下,面的不好,求bless。
: 一轮店面
: 第一题判断一个string的开头第一个字母是不是大写,两行代码就能写完,没有任何陷
: 阱。第二题让我用Java(因为我本来用python)写判断binary tree是不是bst。两个题
: 都很简单,然后还让我说一下自己做过的最challenging的一个project,整个面试不到
: 二十分钟就说问完了问我还有没有问题,我连忙问他为什么这么快是不是我什么地方做
: 错了他不愿继续问下去。答曰他在G工作七年多面了不下一百人,十分清楚哪些人去
: onsite不是在浪费他们engineer的时间,觉得我没有问题。。。
: 过了一周果然hr说去onsite,由于我所在的城市有G的office,所以去那里面,早上三
: 轮然后吃午餐,下午再两轮,一共五轮

avatar
c*0
21
我把你的代码重新优化了一下。。。
string next(string input){
int n = input.size();
bitset<10> v;
vector arr(n, 0);

// step 1: set used digits
for(int i=0; iv[input[i]-'0'] = true;
arr[i] = input[i] - '0';
}
// step 2: find bigger unused digit at cur pos
int i= n-1;
for(; i>=0; i--){
int j = (input[i] - '0');
int k = j+1;

// clear
v[j] = false;

for(;k<=9 && v[k]; k++);
// found possible pos, break
if (k<=9){
v[k] = true;
arr[i] = k;
break;
}
}

// step 2, till front, and still no valid pos example: "987"
// next should be: "1023"
bool carry = false;
if(i == -1){
if(v.count() == 0 && n==10) return "";
carry = true;
v[1] = true;
}
// step 3.2: set correct smallest and increasing digits from break
position
int j=0;
for(++i; ifor(; j<=9; j++){
if (v[j] == false){
arr[i] = j;
v[j] = true;
j++;
break;
}
}
}
if(carry) arr.insert(arr.begin(), 1);

string str="";
for(int t: arr)
str+= t+'0';
return str;
}

历。

【在 g*****g 的大作中提到】
: 电面2似乎本版讨论过几次了,我还贴过code。基本就是 high和low boundary一次遍历。
: onsite 1: 楼主回家后的思路是对的
: onsite 2:
: 1)前->末遍历 记录到目前位置,使用过的 digit
: 2)末->前遍历 对每一个数字,查找是否存在,大于自己切未使用的数字,如找到,
: break
: 如果2)到了头,且头是9,需要进位
: 3) 从break的位置开始-》末遍历,依次选取最小且未使用的数字
: string next(string input)
: {

avatar
t*7
22
兄弟能给简单讲下思路不?

【在 c******0 的大作中提到】
: 第一轮应该是用DP。扫两遍,第一遍从头到尾。第二遍倒过来扫。
: 如果用DFS,复杂度就不能保证是N^2了。
: void findDistance(vector > &block){
: if(block.empty()) return;
: int row = block.size(), col = block[0].size();
: for(int i=0; i: for(int j=0; j: if(block[i][j] == 'B' || block[i][j] == 'G')
: continue;
:

avatar
c*0
23
思路很简单。就是根据周围的距离来确定自己的距离。因为有四个方向,所以要扫两边
。第一遍检测自己上面和前面的邻居。第二遍从后扫 检测自己后面和下面的邻居。这
样四个邻居都检测过了,就可以确定最小距离。

【在 t*******7 的大作中提到】
: 兄弟能给简单讲下思路不?
avatar
g*g
24
这个是图问题,BFS。
LZ已经说了最优解。

【在 c******0 的大作中提到】
: 第一轮应该是用DP。扫两遍,第一遍从头到尾。第二遍倒过来扫。
: 如果用DFS,复杂度就不能保证是N^2了。
: void findDistance(vector > &block){
: if(block.empty()) return;
: int row = block.size(), col = block[0].size();
: for(int i=0; i: for(int j=0; j: if(block[i][j] == 'B' || block[i][j] == 'G')
: continue;
:

avatar
s*n
25
bless
avatar
k*o
26
mark
avatar
A*o
27
Bless LZ.
写了个onsite第二轮的python解法, 感觉这题不简单啊...
used = [0 for _ in xrange(10)]
def check(s):
global used
for k in xrange(10):
if used[k] > 1:
return False
return True
def min_unused():
for i in xrange(10):
if not used[i]:
return i
return -1
def add1(l):
global used
n = len(l)
k = c = t = pos = -1
for i in xrange(n-1, -1, -1):
c = l[i]
t = (c+1) % 10
if not used[t]:
pos = i
k = c
break
if k == -1:
return False
if k == 9:
l[pos] = 0
used[0] = 1
used[9] = 0
m = min_unused()
if m == -1:
return None
used[m] = 1
if pos == 0:
l.insert(0, m)
else:
used[l[pos-1]] = 0
l[pos-1] = m
else:
x = l[pos]
used[x] = 0
l[pos] = x+1
used[x+1] = 1
return True
def swap(l):
n = len(l)
for i in xrange(n-1, -1, -1):
for j in xrange(i-1, -1, -1):
if l[j] < l[i]:
l[i],l[j] = l[j],l[i]
return True
return False
def tolist(num):
r = []
while num:
r.append(num % 10)
num /= 10
return r[::-1]
def tonum(l):
r = 0
for x in l:
r *= 10
r += x
return r
# @input num is an integer
def get_next_bigger(num):
global used
for i in xrange(10):
used[i] = 0
l = tolist(num)
for i in l:
used[i] += 1
if used[i] > 1:
return None
if add1(l):
return tonum(l)
if swap(l):
return tonum(l)
return None
def test3():
#num = 1234567980
num = 1
cnt = 0
while num:
print num
cnt += 1
if cnt == 50:
break
num = get_next_bigger(num)
#while
if __name__ == "__main__":
test3()
avatar
P*9
28
多谢分享!楼主好运!
avatar
l*u
29
bless

【在 b*********s 的大作中提到】
: 昨天onsite完的,趁还记得上来写一下,面的不好,求bless。
: 一轮店面
: 第一题判断一个string的开头第一个字母是不是大写,两行代码就能写完,没有任何陷
: 阱。第二题让我用Java(因为我本来用python)写判断binary tree是不是bst。两个题
: 都很简单,然后还让我说一下自己做过的最challenging的一个project,整个面试不到
: 二十分钟就说问完了问我还有没有问题,我连忙问他为什么这么快是不是我什么地方做
: 错了他不愿继续问下去。答曰他在G工作七年多面了不下一百人,十分清楚哪些人去
: onsite不是在浪费他们engineer的时间,觉得我没有问题。。。
: 过了一周果然hr说去onsite,由于我所在的城市有G的office,所以去那里面,早上三
: 轮然后吃午餐,下午再两轮,一共五轮

avatar
b*s
30
谢谢!
嗯 面试官也同意follow up的确很多edge case,不过第一问不难写,follow up没要我
写代码,当然也可能是我手脚慢所以没时间了

【在 A*****o 的大作中提到】
: Bless LZ.
: 写了个onsite第二轮的python解法, 感觉这题不简单啊...
: used = [0 for _ in xrange(10)]
: def check(s):
: global used
: for k in xrange(10):
: if used[k] > 1:
: return False
: return True
: def min_unused():

avatar
b*e
31
祝福楼主。
这种情况就是说有人有slightly negative的意见, 但是没有strongly negative的意见
。如果有名校的文凭那就是妥妥的。

little

【在 b*********s 的大作中提到】
: 谢谢!
: 嗯 面试官也同意follow up的确很多edge case,不过第一问不难写,follow up没要我
: 写代码,当然也可能是我手脚慢所以没时间了

avatar
b*s
32

谢祝福!
这么看来我悬了,学校不是很好,成绩单不好看。。。

【在 b***e 的大作中提到】
: 祝福楼主。
: 这种情况就是说有人有slightly negative的意见, 但是没有strongly negative的意见
: 。如果有名校的文凭那就是妥妥的。
:
: little

avatar
f*e
33
Bless! 祝愿LZ尽快拿到G的offer!
avatar
h*d
34
Bless!

little

【在 b*********s 的大作中提到】
:
: 谢祝福!
: 这么看来我悬了,学校不是很好,成绩单不好看。。。

avatar
A*c
35
Bless 拿到offer!

little

【在 b*********s 的大作中提到】
:
: 谢祝福!
: 这么看来我悬了,学校不是很好,成绩单不好看。。。

avatar
z*k
36
Bless!
avatar
m*l
37
bless楼主
avatar
c*0
38
bless~~~
LZ的那个压缩的题是怎么做的?能具体说说想法么?
avatar
b*s
39

谢bless
这个题当时我答的并不好,我就说说后来面试官跟我解释的那个做法吧。
对input从左往右扫,维持一个hashtable记录前面所出现过所有三位数和它们最后一次
出现的位置,举个例子说明
input:2 3 4 5 2 3 4 5 1...
用 digit 代表正在扫描的数字,record表示hashtable:
digit record
2 {}
3 {}
4 {234: 0}
5 {234: 0, 345: 1}
2 {234: 0, 345: 1, 452: 2}
3 {234: 0, 345: 1, 452: 2, 523: 3}
4 {234: 4, 345: 1, 452: 2, 523: 3}
.
.
.
此外,在扫描一个数字的时候,如果发现有重复出现的三位数,那么就开始对比下去,
尝试找到最长的match。继续用回上面的例子:
在扫描到第二个4的时候,会发现234重复出现,所以就继续比较input[3] 和 input[7]
, 两个都是5,match,所以继续比较input[4] 和 input[8], 一个是2另一个是1,不匹
配,停止,所以在这次发现重复里面就找到一个长度为4的重复,写下压缩记录"4 4" (
往回退4个数字复制4个), 然后继续扫描下一个数字 1。大概思路就是这样,当然中间
还有很多细节,我当时用了一个差不多的想法,一边写代码就一边发现很多东西没有考
虑周全。。。

【在 c******0 的大作中提到】
: bless~~~
: LZ的那个压缩的题是怎么做的?能具体说说想法么?

avatar
d*l
40
000
0B0
0GB

【在 c******0 的大作中提到】
: 思路很简单。就是根据周围的距离来确定自己的距离。因为有四个方向,所以要扫两边
: 。第一遍检测自己上面和前面的邻居。第二遍从后扫 检测自己后面和下面的邻居。这
: 样四个邻居都检测过了,就可以确定最小距离。

avatar
B*1
41
神牛,好久不看你发帖子了,现在在哪里混阿。

【在 d*******l 的大作中提到】
: 000
: 0B0
: 0GB

avatar
n*a
42
gx lz
avatar
d*l
43
大牛快别这么说。我感觉咱们好像在同一个公司

【在 B*******1 的大作中提到】
: 神牛,好久不看你发帖子了,现在在哪里混阿。
avatar
B*1
44
荣幸阿,很想认识你,以前除了学习leetcode的code都学习你的。

【在 d*******l 的大作中提到】
: 大牛快别这么说。我感觉咱们好像在同一个公司
avatar
h*t
45
求明示: 为什么用3位数,而不是用2位数?

【在 b*********s 的大作中提到】
:
: 谢bless
: 这个题当时我答的并不好,我就说说后来面试官跟我解释的那个做法吧。
: 对input从左往右扫,维持一个hashtable记录前面所出现过所有三位数和它们最后一次
: 出现的位置,举个例子说明
: input:2 3 4 5 2 3 4 5 1...
: 用 digit 代表正在扫描的数字,record表示hashtable:
: digit record
: 2 {}
: 3 {}

avatar
d*l
46
不敢当啊。你是在弯曲这边的office么?我刚来没多久,还要各位前辈多关照呢

【在 B*******1 的大作中提到】
: 荣幸阿,很想认识你,以前除了学习leetcode的code都学习你的。
avatar
B*1
47
是啊

【在 d*******l 的大作中提到】
: 不敢当啊。你是在弯曲这边的office么?我刚来没多久,还要各位前辈多关照呢
avatar
d*l
48
有空一块吃饭!之前见过leetcode跟火鸡

【在 B*******1 的大作中提到】
: 是啊
avatar
B*1
49
发你站内信了。

【在 d*******l 的大作中提到】
: 有空一块吃饭!之前见过leetcode跟火鸡
avatar
b*o
50
好诡异的面经呀,居然Java,python,c++都考了。一般难道不应该指定一个自己最熟
的吗?

【在 b*********s 的大作中提到】
:
: 谢bless
: 这个题当时我答的并不好,我就说说后来面试官跟我解释的那个做法吧。
: 对input从左往右扫,维持一个hashtable记录前面所出现过所有三位数和它们最后一次
: 出现的位置,举个例子说明
: input:2 3 4 5 2 3 4 5 1...
: 用 digit 代表正在扫描的数字,record表示hashtable:
: digit record
: 2 {}
: 3 {}

avatar
b*s
51

估计是因为三位以下的重复就算压缩了也省不了多少容量吧

【在 h****t 的大作中提到】
: 求明示: 为什么用3位数,而不是用2位数?
avatar
c*0
52
确实不错的解法!谢谢分享~
LZ拿到offer了么?

【在 b*********s 的大作中提到】
:
: 估计是因为三位以下的重复就算压缩了也省不了多少容量吧

avatar
b*s
53

还在等 hr说下周一应该有结果

【在 c******0 的大作中提到】
: 确实不错的解法!谢谢分享~
: LZ拿到offer了么?

avatar
T*u
54
一定要java吗?光python不行吗?
avatar
b*s
55

这东西还是要看你遇到面试官,我有跟hr还有面试官都说了我比较熟悉的是python

【在 T*****u 的大作中提到】
: 一定要java吗?光python不行吗?
avatar
w*H
56
bless!
avatar
T*u
57
我看到这题第一感觉就是用monte carlo做multiple source的diffusion model,做多
了什么东西都往这方向上想

【在 c******0 的大作中提到】
: 思路很简单。就是根据周围的距离来确定自己的距离。因为有四个方向,所以要扫两边
: 。第一遍检测自己上面和前面的邻居。第二遍从后扫 检测自己后面和下面的邻居。这
: 样四个邻居都检测过了,就可以确定最小距离。

avatar
l*a
58
mark
avatar
s*d
59
你这个超过9步就有挂的可能吧,或者说18步就不对了

【在 c******0 的大作中提到】
: 第一轮应该是用DP。扫两遍,第一遍从头到尾。第二遍倒过来扫。
: 如果用DFS,复杂度就不能保证是N^2了。
: void findDistance(vector > &block){
: if(block.empty()) return;
: int row = block.size(), col = block[0].size();
: for(int i=0; i: for(int j=0; j: if(block[i][j] == 'B' || block[i][j] == 'G')
: continue;
:

avatar
w*s
60
第二题不是中序便利,看看是不是排好序么

【在 x****g 的大作中提到】
: 第二题思路不对吧.你貌似只顾当前节点满足>左,: 比方说:
: 4
: / \
: 2 5
: / \ /
: 1 6 3
: 判不出6,3都有问题?呵呵.
: 另抱歉说一句,即使结果正确,这个code也表现的凌乱.
: 加油练习哦.

avatar
h*6
61

这个压缩记录应该是4 8不是4 4吧。另外如果是2 3 4 5 2 3 4 5 2 3 7 7 7...好像这
个方法不行,不然压缩出来的是6 12 #7 #7 #7 ...?因为两个segments有overlap的部分
多谢lz面经 感觉这些题挺难的 找工作运气占非常大的成分 只能move on了

【在 b*********s 的大作中提到】
:
: 这东西还是要看你遇到面试官,我有跟hr还有面试官都说了我比较熟悉的是python

avatar
c*m
62
没看出来这里所说的方法能把题目所述的 3, 5, 6, 5, 6, 5, 6, 5, 8...压缩成#3,
#5, #6, 2 5, #8...啊,如果hashtable中只记三位数的话。有哪位大牛能解释一下么?

谢bless
这个题当时我答的并不好,我就说说后来面试官跟我解释的那个做法吧。
对input从左往右扫,维持一个hashtable记录前面所出现过所有三位数和它们最后一次
出现的位置,举个例子说明
input:2 3 4 5 2 3 4 5 1...
用 digit 代表正在扫描的数字,record表示hashtable:
digit record
2 {}
3 {}
4 {234: 0}
5 {234: 0, 345: 1}
2 {234: 0, 345: 1, 452: 2}
3 {234: 0, 345: 1, 452: 2, 523: 3}
4 {234: 4, 345: 1, 452: 2, 523: 3}
.
.
.
此外,在扫描一个数字的时候,如果发现有重复出现的三位数,那么就开始对比下去,
尝试找到最长的match。继续用回上面的例子:
在扫描到第二个4的时候,会发现234重复出现,所以就继续比较input[3] 和 input[7]
, 两个都是5,match,所以继续比较input[4] 和 input[8], 一个是2另一个是1,不匹
配,停止,所以在这次发现重复里面就找到一个长度为4的重复,写下压缩记录"4 4" (
往回退4个数字复制4个), 然后继续扫描下一个数字 1。大概思路就是这样,当然中间
还有很多细节,我当时用了一个差不多的想法,一边写代码就一边发现很多东西没有考
虑周全。。。

【在 c******0 的大作中提到】
: bless~~~
: LZ的那个压缩的题是怎么做的?能具体说说想法么?

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。