s********u 发帖数: 1109 | 1 老印面试,人挺nice的,就是说话还是听不太清楚。特别是带了耳塞接电话,声音很“
刺”,免提又怕更听不清楚。
0.以为电面不问behavior的,没想到问我平时用不用ebay,如何提高用户体验等。。幸
好我用的比较多,随便扯了些。但是很担心突然说让我根据我说的design一下,所以战
战兢兢。
1.用stack实现一个queue,careercup书原题。我在dequeue里面用了shiftstack,他问
我能不能将enqueue的time cost降低到O(1),我说可以,只要每次enqueue时候都
shiftstack就可以了。他问我哪种更好(enqueue和dequeue几率相同),我说前者更好
,因为dequeue的时候,只要leftstack不空,是不需要shiftstack的。
2.// Input -> "I have 36 books, 40 pens2, and 1 notebook."
// Output -> "I evah 36 skoob, 40 2snep, dna 1 koobeton."
如果是数字,原样输出,如果不是,那么倒序。
挺简单的题目,卡了5分钟,最近leetcode做多了啥都想复杂了,一开始想用
stringstream读字符串,又觉得标点不好处理,而且空格会丢。(ignore的话就丢了标
点)甚至有一秒钟想到什么递归和dp去了。。。
然后有点将信将疑的就用for循环做了一遍。碰到数字往下走,如果一直走到标点或者
空格那么就把数字的这个substring加上去,如果中间就跳出了,那么返回到原来的
index,把字符串倒序。(连reverse函数都出现了两个小错误。。),添加到result字
符串上去。
然后他问了我两个test case,第一个“test”提示我找到 自己code中没有判断string
的末尾;第二个test case “12345688888x”,问我能不能走通,如果可以能不能做
更好。然后我说就算不是数字index不用往回,继续往下走即可,但回答得磕磕碰碰,
因为一开始以为自己有什么bug。
==================================================
大概因为是第一轮 都是很简单的题目,没有算法可言,但因为面试经验不够,写代码
不自信,还老犯小错误,难以想象要是让我当场写一个wordladder题,会有多少typo和
错误。。
连个tree都没考到还弄得这么曲折。。没脸见人了。
不过面试官说不用担心,pretty good之类,估计是安慰我。。哭。
先不管了,还是要多练练,可能不是FLG的话,还是熟练和bugfree重要点。。
顺便求要求低一点的it公司内推。。 |
c********p 发帖数: 1969 | |
r********7 发帖数: 102 | 3 只要面试官说了“pretty good” 就应该可以过的。
另外第二题其实难度还可以的,还要考虑到标点符号。还有“abc123” 这样应不应该
reverse的问题。
楼主总结了那么多ebay面试题,下功夫了,一定没问题!~
我这周也有onsite,借鉴了不少楼主总结的面经,在此谢过!~ |
f******p 发帖数: 173 | 4 写了一下第二题,后来一测试还是发现没有考虑string不以, . ' '结束的情况。。哎
。。。
【在 s********u 的大作中提到】 : 老印面试,人挺nice的,就是说话还是听不太清楚。特别是带了耳塞接电话,声音很“ : 刺”,免提又怕更听不清楚。 : 0.以为电面不问behavior的,没想到问我平时用不用ebay,如何提高用户体验等。。幸 : 好我用的比较多,随便扯了些。但是很担心突然说让我根据我说的design一下,所以战 : 战兢兢。 : 1.用stack实现一个queue,careercup书原题。我在dequeue里面用了shiftstack,他问 : 我能不能将enqueue的time cost降低到O(1),我说可以,只要每次enqueue时候都 : shiftstack就可以了。他问我哪种更好(enqueue和dequeue几率相同),我说前者更好 : ,因为dequeue的时候,只要leftstack不空,是不需要shiftstack的。 : 2.// Input -> "I have 36 books, 40 pens2, and 1 notebook."
|
s********u 发帖数: 1109 | 5 是的,我就是犯了这个错误。总之还是不熟练,平时练习的话IDE一跑或者对下答案也
不当回事,到面试就容易有typo或者错误
【在 f******p 的大作中提到】 : 写了一下第二题,后来一测试还是发现没有考虑string不以, . ' '结束的情况。。哎 : 。。。
|
b**********5 发帖数: 7881 | |
s********u 发帖数: 1109 | 7 就是把一个stack里的东西pop出来,push到另一个去。这样的话两次FILO,就变成FIFO
的queue了。
可以看careercup第三章原题。我面试的时候是直接把原来的代码调出来照抄了呵呵
【在 b**********5 的大作中提到】 : 什么叫shiftstack?
|
b**********5 发帖数: 7881 | 8 这个我知道。 但没懂你的shiftstack什么意思。 然后也没有懂还有什么two
alternative让你选什么好。 enqueue不就是个push 么? 本来就是O(1)啊
FIFO
【在 s********u 的大作中提到】 : 就是把一个stack里的东西pop出来,push到另一个去。这样的话两次FILO,就变成FIFO : 的queue了。 : 可以看careercup第三章原题。我面试的时候是直接把原来的代码调出来照抄了呵呵
|
S******6 发帖数: 55 | |
s********u 发帖数: 1109 | 10 1.关于shiftstack,enqueue是push,O(1)操作;但是dequeue的时候,如果leftstack
不为空,那么需要把rightstack的东西全部shift到leftstack去,而不能只shift一个。
2.让我选的是,是否能够把dequeue用O(1)实现,那么也就是说,shiftstack放到
enqueue的时候操作,这样就行了。但这样的话总体来说其实并不划算,因为每次
enqueue都要shiftstack来清空rightstack;而原来那种操作方式,只有在leftstack空
的时候才需要这么做。
他问我的基本就是这些意思
【在 b**********5 的大作中提到】 : 这个我知道。 但没懂你的shiftstack什么意思。 然后也没有懂还有什么two : alternative让你选什么好。 enqueue不就是个push 么? 本来就是O(1)啊 : : FIFO
|
|
|
p****o 发帖数: 46 | 11 第二题如果是, . ' '结束的情况, 用stack
否则的话,结尾还得把stack输出.
确实,一步小心就容易忽略
写个c++的代码
#include
#include
using namespace std;
string strProc(string input){
stack stk;
string result;
for(string::const_iterator it = input.begin(); it!=input.end(); ++it){
if (*it < '9' && *it > '0' && stk.empty()){
result+=*it;
}
else if (*it == ' ' || *it ==',' || *it =='.'){
while (!stk.empty()){
char c= stk.top();
stk.pop();
result+=c;
}
result+=*it;
}
else {
stk.push(*it);
}
}
while (!stk.empty())
{
char c= stk.top();
stk.pop();
result+=c;
}
return result;
}
int main(){
string s = "I have 36 books, 40 pens2, and 1 notebook.";
cout << strProc(s) << endl;
}
【在 f******p 的大作中提到】 : 写了一下第二题,后来一测试还是发现没有考虑string不以, . ' '结束的情况。。哎 : 。。。
|
l***n 发帖数: 89 | 12 基本idea我觉得lz肯定对的。但是每次enqueue就shiftstack好像会有错啊。
比如
enqueue(1), enqueue(2), enqueue(3), 每次都shift的话,那么leftstack里面是1,2
,3. 没问题
然后dequeue(), 那么1出来。剩下2,3.没问题
然后再enqueue(4)。shiftstack之后,leftstack就是4, 2, 3。这样顺序就不对了。
leftstack
个。
【在 s********u 的大作中提到】 : 1.关于shiftstack,enqueue是push,O(1)操作;但是dequeue的时候,如果leftstack : 不为空,那么需要把rightstack的东西全部shift到leftstack去,而不能只shift一个。 : 2.让我选的是,是否能够把dequeue用O(1)实现,那么也就是说,shiftstack放到 : enqueue的时候操作,这样就行了。但这样的话总体来说其实并不划算,因为每次 : enqueue都要shiftstack来清空rightstack;而原来那种操作方式,只有在leftstack空 : 的时候才需要这么做。 : 他问我的基本就是这些意思
|
s********u 发帖数: 1109 | 13 谢谢指出。面试的时候有点紧张没有仔细考虑。
我想了下,如果每次enqueue就shiftstack,必须将lstack倒到rstack,然后push进来
,再倒回去。。
,2
【在 l***n 的大作中提到】 : 基本idea我觉得lz肯定对的。但是每次enqueue就shiftstack好像会有错啊。 : 比如 : enqueue(1), enqueue(2), enqueue(3), 每次都shift的话,那么leftstack里面是1,2 : ,3. 没问题 : 然后dequeue(), 那么1出来。剩下2,3.没问题 : 然后再enqueue(4)。shiftstack之后,leftstack就是4, 2, 3。这样顺序就不对了。 : : leftstack : 个。
|
s********u 发帖数: 1109 | 14 你比我写的好多了,我写的大致是这样的:
// Input -> "I have 36 books, 40 pens2, and 1 notebook."
// Output -> "I evah 36 skoob, 40 2snep, dna 1 koobeton."
string reverse( string& word){
if( word.empty() || word.size() == 1)
return word;
int left = 0;
int right = word.size() - 1;
char tmp;
while( left < right ){
tmp = word[right];
word[right] = word[left];
word[left] = tmp;
left++;
right--;
}
return word;
}
// Input: test => tset
// Input: 1234567888888x
string perform( string str ){
string word;
string res;
int i = 0;
for( i = 0 ; i< str.size();i++){
if( str[i] == ' ' || str[i] == '.' || str[i] == ',' )
res = res + str[i];
int j = i;
if( isdigit(str[i]){
while( isdigit(str[j]) )
j++;
if( j == str.size() || str[j] == ' ' || str[j] == ',' || str[j]
== '.' ){
word = str.substr( i, j - i);
i = j+1;
res = res + word;
continue;
}
}
while( str[j] != ' ' || str[j] != ',' || str[j] != '.' || j < str.
size() )
j++;
word = str.substr( i, j - i);
i = j + 1;
res = res + reverse(word);
}
return res;
}
【在 p****o 的大作中提到】 : 第二题如果是, . ' '结束的情况, 用stack : 否则的话,结尾还得把stack输出. : 确实,一步小心就容易忽略 : 写个c++的代码 : #include : #include : using namespace std; : string strProc(string input){ : stack stk; : string result;
|
f*******d 发帖数: 45 | |
s********u 发帖数: 1109 | 16 这个版上普遍是基本不屑于提ebay这个档次的吧。。
【在 f*******d 的大作中提到】 : 各种羡慕 高级码农啊
|
m*******m 发帖数: 80 | 17 谢谢面筋!~~
刚试了试, 我靠, 第二题稍不小心就出bug, 我刚用eclipse敲一遍, 去, debug了好多遍
才完全没问题, 电面那点时间, 我可以肯定我会出问题... |
s********u 发帖数: 1109 | 18 多谢大家支持,过了第一轮。下周第二轮。
很奇怪hr没有联系我。我今天忍不住问了一下hr,然后他说是positive feedback,准
备安排下一轮。难道我不问他就不通知我了么,汗。。 |
y***g 发帖数: 1492 | 19 有点问题 123abc会变成123cba
如果中间没有空格应该保持不变吧
【在 p****o 的大作中提到】 : 第二题如果是, . ' '结束的情况, 用stack : 否则的话,结尾还得把stack输出. : 确实,一步小心就容易忽略 : 写个c++的代码 : #include : #include : using namespace std; : string strProc(string input){ : stack stk; : string result;
|
s********u 发帖数: 1109 | 20 所以我当时的选择还不错,不用stack,而是把substring提取出来reverse,再添加到
结果中。
【在 y***g 的大作中提到】 : 有点问题 123abc会变成123cba : 如果中间没有空格应该保持不变吧
|
|
|
c********p 发帖数: 1969 | |
c********p 发帖数: 1969 | |
s********u 发帖数: 1109 | 23 今天练习了一下,这种应该是最优的了,不用别的数据结构,而且也只用一次遍历:
string process( const string &input){
int begin = 0;
int end = 0;
bool isNumber = true;
char local;
string word;
string res;
for( end = 0; end < input.size(); end++ ){
local = input[end];
if( isdigit( local ) ){
}else if ( local == ' ' || local == ',' || local == '.' ){
word = input.substr(begin, end - begin);
if(isNumber){
res += word;
}else{
res += reverse(word);
}
res += local;
isNumber = true;
begin = end + 1;
}else{
isNumber = false;
}
}
return res;
} |
t******d 发帖数: 1383 | 24 2个小时的ebay phone是不是?现在都要2个小时,还要2次了?一共4个小时的phone阿
,好累 |
j*******t 发帖数: 223 | 25 过了三周hr都没通知你?然后你催才出来的?他不是忘了吧... |
s********u 发帖数: 1109 | 26 注意更新时间。
【在 j*******t 的大作中提到】 : 过了三周hr都没通知你?然后你催才出来的?他不是忘了吧...
|
k******e 发帖数: 145 | 27 第二个题目难道不是第一个题目的升级版本么?
是字符直接输出,是数字就入栈直到非数字就出栈直到栈空。
【在 s********u 的大作中提到】 : 注意更新时间。
|
s******3 发帖数: 344 | 28
【在 s********u 的大作中提到】 : 注意更新时间。
|
P**********k 发帖数: 1629 | 29 #include
#include
using namespace std;
void reverseWords(const string str_in, string &str_out, int length){
int i=0, j=0;
while(i
if(!is_letter(str_in, i)){
str_out[j++] = str_in[i++];
}else{
int start = i;
while(is_letter(str_in, i) && i
i++;
}
int end = i-1;
//reverse copying
for(int k=end; k>=start; k--){
str_out[j++]=str_in[k];
}
}
}
}
bool is_letter(string str, int i){
return (str[i]-'a'>=0 && str[i]-'a'<=25)||(str[i]-'A'>=0 && str[i]-'A'<=
25);
} |
b****f 发帖数: 138 | |
|
|
x******9 发帖数: 473 | 31 第1.题的第二段是不是打错了?好像说反了
【在 s********u 的大作中提到】 : 注意更新时间。
|
f*******r 发帖数: 1086 | |
l*y 发帖数: 70 | |