b*********s 发帖数: 115 | 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一下然
后有奇迹发生吧。 |
g*****i 发帖数: 91 | 2 祝福楼主!等你的好消息update!
我下周也要面g的电面了 |
n****g 发帖数: 14743 | 3 加油。
【在 b*********s 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 昨天onsite完的,趁还记得上来写一下,面的不好,求bless。 : 一轮店面 : 第一题判断一个string的开头第一个字母是不是大写,两行代码就能写完,没有任何陷 : 阱。第二题让我用Java(因为我本来用python)写判断binary tree是不是bst。两个题 : 都很简单,然后还让我说一下自己做过的最challenging的一个project,整个面试不到 : 二十分钟就说问完了问我还有没有问题,我连忙问他为什么这么快是不是我什么地方做 : 错了他不愿继续问下去。答曰他在G工作七年多面了不下一百人,十分清楚哪些人去 : onsite不是在浪费他们engineer的时间,觉得我没有问题。。。 : 过了一周果然hr说去onsite,由于我所在的城市有G的office,所以去那里面,早上三 : 轮然后吃午餐,下午再两轮,一共五轮
|
f*****e 发帖数: 2992 | 4 感觉很水。
【在 b*********s 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 昨天onsite完的,趁还记得上来写一下,面的不好,求bless。 : 一轮店面 : 第一题判断一个string的开头第一个字母是不是大写,两行代码就能写完,没有任何陷 : 阱。第二题让我用Java(因为我本来用python)写判断binary tree是不是bst。两个题 : 都很简单,然后还让我说一下自己做过的最challenging的一个project,整个面试不到 : 二十分钟就说问完了问我还有没有问题,我连忙问他为什么这么快是不是我什么地方做 : 错了他不愿继续问下去。答曰他在G工作七年多面了不下一百人,十分清楚哪些人去 : onsite不是在浪费他们engineer的时间,觉得我没有问题。。。 : 过了一周果然hr说去onsite,由于我所在的城市有G的office,所以去那里面,早上三 : 轮然后吃午餐,下午再两轮,一共五轮
|
t*******7 发帖数: 63 | 5 感谢楼主分享,下礼拜电面,紧张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 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 昨天onsite完的,趁还记得上来写一下,面的不好,求bless。 : 一轮店面 : 第一题判断一个string的开头第一个字母是不是大写,两行代码就能写完,没有任何陷 : 阱。第二题让我用Java(因为我本来用python)写判断binary tree是不是bst。两个题 : 都很简单,然后还让我说一下自己做过的最challenging的一个project,整个面试不到 : 二十分钟就说问完了问我还有没有问题,我连忙问他为什么这么快是不是我什么地方做 : 错了他不愿继续问下去。答曰他在G工作七年多面了不下一百人,十分清楚哪些人去 : onsite不是在浪费他们engineer的时间,觉得我没有问题。。。 : 过了一周果然hr说去onsite,由于我所在的城市有G的office,所以去那里面,早上三 : 轮然后吃午餐,下午再两轮,一共五轮
|
m********l 发帖数: 791 | |
x****g 发帖数: 1512 | 7 第二题思路不对吧.你貌似只顾当前节点满足>左,<右.
比方说:
4
/ \
2 5
/ \ /
1 6 3
判不出6,3都有问题?呵呵.
另抱歉说一句,即使结果正确,这个code也表现的凌乱.
加油练习哦.
【在 t*******7 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 感谢楼主分享,下礼拜电面,紧张ING。。。本人去年12月PHD毕业,专业方向DATA : MINING AND MACHINE LEARNING,搬到湾区找工作,OPT快开始了,目前还没着落,希望 : 能和一起在湾区找工作的同学多多交流互通信息。毕业前没时间准备现在着急了。。。 : 平常MATLAB写得多,JAVA最近才开始练习。。。 : 把电面的两个题写了一下,请拍 : 第一题 : public boolean judgeCapital(String inputString) { : : // : if ((inputString==null) || (inputString.length() == 0)) {
|
T**e 发帖数: 191 | 8 哇,好多下周G家店面的,我也凑个热闹~~ 祝福大家~ |
r****c 发帖数: 2585 | 9 第二题
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);
} |
r****c 发帖数: 2585 | 10 zip file没看懂,为什么用hash
array不行么 |
|
|
t*******7 发帖数: 63 | 11 感谢回复,那兄弟对这个题有啥建议?
【在 x****g 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 第二题思路不对吧.你貌似只顾当前节点满足>左,<右. : 比方说: : 4 : / \ : 2 5 : / \ / : 1 6 3 : 判不出6,3都有问题?呵呵. : 另抱歉说一句,即使结果正确,这个code也表现的凌乱. : 加油练习哦.
|
t*******7 发帖数: 63 | 12 高手
lowerBound) {
recCheckBst(node
【在 r****c 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 第二题 : 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); : } : }
|
x****g 发帖数: 1512 | |
g*****g 发帖数: 212 | 14 电面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 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 昨天onsite完的,趁还记得上来写一下,面的不好,求bless。 : 一轮店面 : 第一题判断一个string的开头第一个字母是不是大写,两行代码就能写完,没有任何陷 : 阱。第二题让我用Java(因为我本来用python)写判断binary tree是不是bst。两个题 : 都很简单,然后还让我说一下自己做过的最challenging的一个project,整个面试不到 : 二十分钟就说问完了问我还有没有问题,我连忙问他为什么这么快是不是我什么地方做 : 错了他不愿继续问下去。答曰他在G工作七年多面了不下一百人,十分清楚哪些人去 : onsite不是在浪费他们engineer的时间,觉得我没有问题。。。 : 过了一周果然hr说去onsite,由于我所在的城市有G的office,所以去那里面,早上三 : 轮然后吃午餐,下午再两轮,一共五轮
|
b*********s 发帖数: 115 | 15
历。
嗯 onsite2那题我当时也是这么回答的 他挺满意
【在 g*****g 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 电面2似乎本版讨论过几次了,我还贴过code。基本就是 high和low boundary一次遍历。 : onsite 1: 楼主回家后的思路是对的 : onsite 2: : 1)前->末遍历 记录到目前位置,使用过的 digit : 2)末->前遍历 对每一个数字,查找是否存在,大于自己切未使用的数字,如找到, : break : 如果2)到了头,且头是9,需要进位 : 3) 从break的位置开始-》末遍历,依次选取最小且未使用的数字 : string next(string input) : {
|
c******0 发帖数: 260 | 16 第一轮应该是用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;
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(i
step = (block[i+1][j] == 'G')? '1' : block[i+1][j]+1;
if(j
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;
}
}
}
【在 b*********s 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 昨天onsite完的,趁还记得上来写一下,面的不好,求bless。 : 一轮店面 : 第一题判断一个string的开头第一个字母是不是大写,两行代码就能写完,没有任何陷 : 阱。第二题让我用Java(因为我本来用python)写判断binary tree是不是bst。两个题 : 都很简单,然后还让我说一下自己做过的最challenging的一个project,整个面试不到 : 二十分钟就说问完了问我还有没有问题,我连忙问他为什么这么快是不是我什么地方做 : 错了他不愿继续问下去。答曰他在G工作七年多面了不下一百人,十分清楚哪些人去 : onsite不是在浪费他们engineer的时间,觉得我没有问题。。。 : 过了一周果然hr说去onsite,由于我所在的城市有G的office,所以去那里面,早上三 : 轮然后吃午餐,下午再两轮,一共五轮
|
c********l 发帖数: 8138 | 17 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 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 第二题 : 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); : } : }
|
A*********c 发帖数: 430 | 18 多谢,bless!
【在 b*********s 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 昨天onsite完的,趁还记得上来写一下,面的不好,求bless。 : 一轮店面 : 第一题判断一个string的开头第一个字母是不是大写,两行代码就能写完,没有任何陷 : 阱。第二题让我用Java(因为我本来用python)写判断binary tree是不是bst。两个题 : 都很简单,然后还让我说一下自己做过的最challenging的一个project,整个面试不到 : 二十分钟就说问完了问我还有没有问题,我连忙问他为什么这么快是不是我什么地方做 : 错了他不愿继续问下去。答曰他在G工作七年多面了不下一百人,十分清楚哪些人去 : onsite不是在浪费他们engineer的时间,觉得我没有问题。。。 : 过了一周果然hr说去onsite,由于我所在的城市有G的office,所以去那里面,早上三 : 轮然后吃午餐,下午再两轮,一共五轮
|
c******0 发帖数: 260 | 19 我把你的代码重新优化了一下。。。
string next(string input){
int n = input.size();
bitset<10> v;
vector arr(n, 0);
// step 1: set used digits
for(int i=0; i
v[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; i
for(; 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 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 电面2似乎本版讨论过几次了,我还贴过code。基本就是 high和low boundary一次遍历。 : onsite 1: 楼主回家后的思路是对的 : onsite 2: : 1)前->末遍历 记录到目前位置,使用过的 digit : 2)末->前遍历 对每一个数字,查找是否存在,大于自己切未使用的数字,如找到, : break : 如果2)到了头,且头是9,需要进位 : 3) 从break的位置开始-》末遍历,依次选取最小且未使用的数字 : string next(string input) : {
|
t*******7 发帖数: 63 | 20 兄弟能给简单讲下思路不?
【在 c******0 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 第一轮应该是用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; :
|
|
|
c******0 发帖数: 260 | 21 思路很简单。就是根据周围的距离来确定自己的距离。因为有四个方向,所以要扫两边
。第一遍检测自己上面和前面的邻居。第二遍从后扫 检测自己后面和下面的邻居。这
样四个邻居都检测过了,就可以确定最小距离。
【在 t*******7 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 兄弟能给简单讲下思路不?
|
g*****g 发帖数: 212 | 22 这个是图问题,BFS。
LZ已经说了最优解。
【在 c******0 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 第一轮应该是用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; :
|
s*******n 发帖数: 305 | |
k*****o 发帖数: 43 | |
A*****o 发帖数: 284 | 25 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() |
P****9 发帖数: 177 | |
l*********u 发帖数: 19053 | 27 bless
【在 b*********s 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 昨天onsite完的,趁还记得上来写一下,面的不好,求bless。 : 一轮店面 : 第一题判断一个string的开头第一个字母是不是大写,两行代码就能写完,没有任何陷 : 阱。第二题让我用Java(因为我本来用python)写判断binary tree是不是bst。两个题 : 都很简单,然后还让我说一下自己做过的最challenging的一个project,整个面试不到 : 二十分钟就说问完了问我还有没有问题,我连忙问他为什么这么快是不是我什么地方做 : 错了他不愿继续问下去。答曰他在G工作七年多面了不下一百人,十分清楚哪些人去 : onsite不是在浪费他们engineer的时间,觉得我没有问题。。。 : 过了一周果然hr说去onsite,由于我所在的城市有G的office,所以去那里面,早上三 : 轮然后吃午餐,下午再两轮,一共五轮
|
b*********s 发帖数: 115 | 28 谢谢!
嗯 面试官也同意follow up的确很多edge case,不过第一问不难写,follow up没要我
写代码,当然也可能是我手脚慢所以没时间了
【在 A*****o 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 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():
|
b***e 发帖数: 1419 | 29 祝福楼主。
这种情况就是说有人有slightly negative的意见, 但是没有strongly negative的意见
。如果有名校的文凭那就是妥妥的。
little
【在 b*********s 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 谢谢! : 嗯 面试官也同意follow up的确很多edge case,不过第一问不难写,follow up没要我 : 写代码,当然也可能是我手脚慢所以没时间了
|
b*********s 发帖数: 115 | 30
谢祝福!
这么看来我悬了,学校不是很好,成绩单不好看。。。
【在 b***e 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 祝福楼主。 : 这种情况就是说有人有slightly negative的意见, 但是没有strongly negative的意见 : 。如果有名校的文凭那就是妥妥的。 : : little
|
|
|
f********e 发帖数: 91 | 31 Bless! 祝愿LZ尽快拿到G的offer! |
h*d 发帖数: 19309 | 32 Bless!
little
【在 b*********s 的大作中提到】![](/moin_static193/solenoid/img/up.png) : : 谢祝福! : 这么看来我悬了,学校不是很好,成绩单不好看。。。
|
A*********c 发帖数: 430 | 33 Bless 拿到offer!
little
【在 b*********s 的大作中提到】![](/moin_static193/solenoid/img/up.png) : : 谢祝福! : 这么看来我悬了,学校不是很好,成绩单不好看。。。
|
z*****k 发帖数: 57 | |
m********l 发帖数: 791 | |
c******0 发帖数: 260 | 36 bless~~~
LZ的那个压缩的题是怎么做的?能具体说说想法么? |
b*********s 发帖数: 115 | 37
谢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 的大作中提到】![](/moin_static193/solenoid/img/up.png) : bless~~~ : LZ的那个压缩的题是怎么做的?能具体说说想法么?
|
d*******l 发帖数: 338 | 38 000
0B0
0GB
【在 c******0 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 思路很简单。就是根据周围的距离来确定自己的距离。因为有四个方向,所以要扫两边 : 。第一遍检测自己上面和前面的邻居。第二遍从后扫 检测自己后面和下面的邻居。这 : 样四个邻居都检测过了,就可以确定最小距离。
|
B*******1 发帖数: 2454 | 39 神牛,好久不看你发帖子了,现在在哪里混阿。
【在 d*******l 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 000 : 0B0 : 0GB
|
n*****a 发帖数: 107 | |
|
|
d*******l 发帖数: 338 | 41 大牛快别这么说。我感觉咱们好像在同一个公司
【在 B*******1 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 神牛,好久不看你发帖子了,现在在哪里混阿。
|
B*******1 发帖数: 2454 | 42 荣幸阿,很想认识你,以前除了学习leetcode的code都学习你的。
【在 d*******l 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 大牛快别这么说。我感觉咱们好像在同一个公司
|
h****t 发帖数: 184 | 43 求明示: 为什么用3位数,而不是用2位数?
【在 b*********s 的大作中提到】![](/moin_static193/solenoid/img/up.png) : : 谢bless : 这个题当时我答的并不好,我就说说后来面试官跟我解释的那个做法吧。 : 对input从左往右扫,维持一个hashtable记录前面所出现过所有三位数和它们最后一次 : 出现的位置,举个例子说明 : input:2 3 4 5 2 3 4 5 1... : 用 digit 代表正在扫描的数字,record表示hashtable: : digit record : 2 {} : 3 {}
|
d*******l 发帖数: 338 | 44 不敢当啊。你是在弯曲这边的office么?我刚来没多久,还要各位前辈多关照呢
【在 B*******1 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 荣幸阿,很想认识你,以前除了学习leetcode的code都学习你的。
|
B*******1 发帖数: 2454 | 45 是啊
【在 d*******l 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 不敢当啊。你是在弯曲这边的office么?我刚来没多久,还要各位前辈多关照呢
|
d*******l 发帖数: 338 | 46 有空一块吃饭!之前见过leetcode跟火鸡
【在 B*******1 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 是啊
|
B*******1 发帖数: 2454 | 47 发你站内信了。
【在 d*******l 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 有空一块吃饭!之前见过leetcode跟火鸡
|
b*****o 发帖数: 715 | 48 好诡异的面经呀,居然Java,python,c++都考了。一般难道不应该指定一个自己最熟
的吗?
【在 b*********s 的大作中提到】![](/moin_static193/solenoid/img/up.png) : : 谢bless : 这个题当时我答的并不好,我就说说后来面试官跟我解释的那个做法吧。 : 对input从左往右扫,维持一个hashtable记录前面所出现过所有三位数和它们最后一次 : 出现的位置,举个例子说明 : input:2 3 4 5 2 3 4 5 1... : 用 digit 代表正在扫描的数字,record表示hashtable: : digit record : 2 {} : 3 {}
|
b*********s 发帖数: 115 | 49
估计是因为三位以下的重复就算压缩了也省不了多少容量吧
【在 h****t 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 求明示: 为什么用3位数,而不是用2位数?
|
c******0 发帖数: 260 | 50 确实不错的解法!谢谢分享~
LZ拿到offer了么?
【在 b*********s 的大作中提到】![](/moin_static193/solenoid/img/up.png) : : 估计是因为三位以下的重复就算压缩了也省不了多少容量吧
|
|
|
b*********s 发帖数: 115 | 51
还在等 hr说下周一应该有结果
【在 c******0 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 确实不错的解法!谢谢分享~ : LZ拿到offer了么?
|
T*****u 发帖数: 7103 | |
b*********s 发帖数: 115 | 53
这东西还是要看你遇到面试官,我有跟hr还有面试官都说了我比较熟悉的是python
【在 T*****u 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 一定要java吗?光python不行吗?
|
w****H 发帖数: 23 | |
T*****u 发帖数: 7103 | 55 我看到这题第一感觉就是用monte carlo做multiple source的diffusion model,做多
了什么东西都往这方向上想
【在 c******0 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 思路很简单。就是根据周围的距离来确定自己的距离。因为有四个方向,所以要扫两边 : 。第一遍检测自己上面和前面的邻居。第二遍从后扫 检测自己后面和下面的邻居。这 : 样四个邻居都检测过了,就可以确定最小距离。
|
l**********a 发帖数: 181 | |
s******d 发帖数: 424 | 57 你这个超过9步就有挂的可能吧,或者说18步就不对了
【在 c******0 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 第一轮应该是用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; :
|
w********s 发帖数: 1570 | 58 第二题不是中序便利,看看是不是排好序么
【在 x****g 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 第二题思路不对吧.你貌似只顾当前节点满足>左,<右. : 比方说: : 4 : / \ : 2 5 : / \ / : 1 6 3 : 判不出6,3都有问题?呵呵. : 另抱歉说一句,即使结果正确,这个code也表现的凌乱. : 加油练习哦.
|
h******6 发帖数: 2697 | 59
这个压缩记录应该是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 的大作中提到】![](/moin_static193/solenoid/img/up.png) : : 这东西还是要看你遇到面试官,我有跟hr还有面试官都说了我比较熟悉的是python
|
c*****m 发帖数: 271 | 60 没看出来这里所说的方法能把题目所述的 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 的大作中提到】![](/moin_static193/solenoid/img/up.png) : bless~~~ : LZ的那个压缩的题是怎么做的?能具体说说想法么?
|