Redian新闻
>
G家面经(已被HC挂,求分析)
avatar
G家面经(已被HC挂,求分析)# JobHunting - 待字闺中
l*r
1
背景:中部弱校master,去年五月毕业,刚工作一年(中部小公司),骑驴找马中。
Onsite一共五轮:
--------------------------------------
第一轮(中东人):
给一个字符串,让压缩并解压,压缩算法类似leetcode中的count and say
输入:aabbbccd 压缩结果:2a3b2cd(注意,'d'前面没有'1')
引申:输入中如果有数字的话,解压时需要注意歧义问题,例如2a可以解压为'2a'或
者'aa',问如何解决。答曰用类似ascii码中加反斜杠的做法,或者加个header来标
志压缩过的位,表示同意。
第二轮(老印):
(leetcode) edit distance,以DP解之,喜。
(leetcode) word ladder,直接给出BFS,不喜,要优化,想了半天给出的答案皆不
喜,最后提示我可以双向BFS,时间不够,没有给出代码。
-----------------午饭-------------------
第三轮(老白)
给一个int的矩阵arr,让返回一个同样大小的result矩阵,每一个result[i][j] = arr
[i][j]及其所有左上方元素的和,DP解之,喜。问了各种test case,一一例举之。
(左上方元素定义:以arr[0][0]和arr[i][j]为对角线的矩阵的所有元素和)
第四轮(老印)
给两个int,第一个代表分子,第二个代表分母,让返回转化成小数后的string
循环位用括号括起来。例如:输入1,3,返回“0.(3)”。输入1,7,返回“0.(142857
)”;暴力解之,用一个LinkedList记录每次的余数,如果出现相同余数,则出现循环
,与前一个相同余数的距离就是循环的位数,插之以括号。喜。
第二题:判断两个二叉树结构相等(左右subtree可对调),递归解之,喜。
第五轮(老白)
(leetcode)search in rotated sorted array。直接背答案,条件二分。
----------------------------------------
一周后HR来电话说HC没过,追问details,拒绝告知,求各路大牛帮分析。
avatar
s*k
2
G家要求好高啊。。。
avatar
d*s
3
"暴力解之,用LL记录每次的余数,如果出现相同余数,则出现循环,与前一个相
同余数的距离就是循环的位数,插之以括号。喜。"
多谢分享,但是这里看不懂。LL是linked list? 什么是每次的余数,什么是相同的余
数则出现循环?
avatar
b*r
4
第五题今天我店面考到了。

【在 l*********r 的大作中提到】
: 背景:中部弱校master,去年五月毕业,刚工作一年(中部小公司),骑驴找马中。
: Onsite一共五轮:
: --------------------------------------
: 第一轮(中东人):
: 给一个字符串,让压缩并解压,压缩算法类似leetcode中的count and say
: 输入:aabbbccd 压缩结果:2a3b2cd(注意,'d'前面没有'1')
: 引申:输入中如果有数字的话,解压时需要注意歧义问题,例如2a可以解压为'2a'或
: 者'aa',问如何解决。答曰用类似ascii码中加反斜杠的做法,或者加个header来标
: 志压缩过的位,表示同意。
: 第二轮(老印):

avatar
g*e
5
感觉是不是做题速度还不够?
第三轮和第五轮都只做了一道简单题。是behavior花时间太多了么?
avatar
b*r
6
老印给的都不简单啊。

【在 l*********r 的大作中提到】
: 背景:中部弱校master,去年五月毕业,刚工作一年(中部小公司),骑驴找马中。
: Onsite一共五轮:
: --------------------------------------
: 第一轮(中东人):
: 给一个字符串,让压缩并解压,压缩算法类似leetcode中的count and say
: 输入:aabbbccd 压缩结果:2a3b2cd(注意,'d'前面没有'1')
: 引申:输入中如果有数字的话,解压时需要注意歧义问题,例如2a可以解压为'2a'或
: 者'aa',问如何解决。答曰用类似ascii码中加反斜杠的做法,或者加个header来标
: 志压缩过的位,表示同意。
: 第二轮(老印):

avatar
d*s
7
nvm 看懂了

【在 d******s 的大作中提到】
: "暴力解之,用LL记录每次的余数,如果出现相同余数,则出现循环,与前一个相
: 同余数的距离就是循环的位数,插之以括号。喜。"
: 多谢分享,但是这里看不懂。LL是linked list? 什么是每次的余数,什么是相同的余
: 数则出现循环?

avatar
l*h
8
既然HC了,说明你面试解题没问题。
小公司找大公司有劣势。HC应该是从学习和工作经历方面考虑得多一些。感觉运气也很
重要,比如这一批人选强人很多,你弱校,小公司他就直接给你下了。
my 2 cents

【在 l*********r 的大作中提到】
: 背景:中部弱校master,去年五月毕业,刚工作一年(中部小公司),骑驴找马中。
: Onsite一共五轮:
: --------------------------------------
: 第一轮(中东人):
: 给一个字符串,让压缩并解压,压缩算法类似leetcode中的count and say
: 输入:aabbbccd 压缩结果:2a3b2cd(注意,'d'前面没有'1')
: 引申:输入中如果有数字的话,解压时需要注意歧义问题,例如2a可以解压为'2a'或
: 者'aa',问如何解决。答曰用类似ascii码中加反斜杠的做法,或者加个header来标
: 志压缩过的位,表示同意。
: 第二轮(老印):

avatar
R*9
9
pat pat, 答得挺好的呀

【在 l*********r 的大作中提到】
: 背景:中部弱校master,去年五月毕业,刚工作一年(中部小公司),骑驴找马中。
: Onsite一共五轮:
: --------------------------------------
: 第一轮(中东人):
: 给一个字符串,让压缩并解压,压缩算法类似leetcode中的count and say
: 输入:aabbbccd 压缩结果:2a3b2cd(注意,'d'前面没有'1')
: 引申:输入中如果有数字的话,解压时需要注意歧义问题,例如2a可以解压为'2a'或
: 者'aa',问如何解决。答曰用类似ascii码中加反斜杠的做法,或者加个header来标
: 志压缩过的位,表示同意。
: 第二轮(老印):

avatar
B*1
10
hc看代码,俺们这里几hc的经常讨论呢。

【在 l****h 的大作中提到】
: 既然HC了,说明你面试解题没问题。
: 小公司找大公司有劣势。HC应该是从学习和工作经历方面考虑得多一些。感觉运气也很
: 重要,比如这一批人选强人很多,你弱校,小公司他就直接给你下了。
: my 2 cents

avatar
g*i
11
有3轮都只有一道题,是不是速度不够?
前两轮的引申和提示如果能自己一开始就主动提出来也会更好。
avatar
t*7
12
mark
avatar
d*i
13
请问第四轮的分子,分母那题怎么做啊?LC的divide two numbers变种?
avatar
a*m
14
不。hc根据报告做决定,包括解题细节。

【在 l****h 的大作中提到】
: 既然HC了,说明你面试解题没问题。
: 小公司找大公司有劣势。HC应该是从学习和工作经历方面考虑得多一些。感觉运气也很
: 重要,比如这一批人选强人很多,你弱校,小公司他就直接给你下了。
: my 2 cents

avatar
h*u
15
bless~
avatar
d*v
16
弱弱问一下HC是什么?
avatar
T*n
17
同问HC是什么
avatar
T*U
18
hire committee

【在 T********n 的大作中提到】
: 同问HC是什么
avatar
x*i
19
re

不。hc根据报告做决定,包括解题细节。

【在 a********m 的大作中提到】
: 不。hc根据报告做决定,包括解题细节。
avatar
U*y
20
Sorry I don't understand your solution either. How do you prevent 3.
14159261415926... from returning '3.(14)' ('1' appears twice)?
It feels like this can be solved by converting the digits to a suffix array
(longest repeated substring).

【在 d******s 的大作中提到】
: "暴力解之,用LL记录每次的余数,如果出现相同余数,则出现循环,与前一个相
: 同余数的距离就是循环的位数,插之以括号。喜。"
: 多谢分享,但是这里看不懂。LL是linked list? 什么是每次的余数,什么是相同的余
: 数则出现循环?

avatar
z*1
21
这种比较简单的原题可能要多关注解题过程,你果断背答案可能不太好。
avatar
l*r
22
Hi, 下面是我当时的解法,如有不妥的地方请指正
首先,因为是两个integer做除法,所以不涉及无线不循环小数的问题,当然循环位可
能super long导致溢出,此处暂不考虑这种情况。
举个例子,1除以7:
除法 结果集 余数集
1 x 10 / 7 = 1 余 3
3 x 10 / 7 = 4 余 2
2 x 10 / 7 = 2 余 6
6 x 10 / 7 ...
...
循环,每次都用前一步得到的余数乘以10(如果除数大于10的话,这里需要乘以多个10
),然后除以除数,并用一个链表记录下余数,做完上面的三步之后,余数集(链表)
中应该存 3 -> 2 -> 6... 结果集(字符串)中存142...
当遇到相同余数的时候(请注意是余数集中出现duplicates,而不是结果集中),即可
判知有循环出现。循环位数就是链表中两个重复数字的距离,在相应位置插入括号即可。

array

【在 U*********y 的大作中提到】
: Sorry I don't understand your solution either. How do you prevent 3.
: 14159261415926... from returning '3.(14)' ('1' appears twice)?
: It feels like this can be solved by converting the digits to a suffix array
: (longest repeated substring).

avatar
l*r
23
请见22楼 =)

【在 d******s 的大作中提到】
: "暴力解之,用LL记录每次的余数,如果出现相同余数,则出现循环,与前一个相
: 同余数的距离就是循环的位数,插之以括号。喜。"
: 多谢分享,但是这里看不懂。LL是linked list? 什么是每次的余数,什么是相同的余
: 数则出现循环?

avatar
l*r
24
恩,第三轮和第五轮确实是做题偏少。其实我感觉这两轮做题的速度还可以,第三轮中
老美问了很多测试,直到结束。第五轮马上下班了,那老美心不在焉的样子,我也有点
累了,两个人就聊聊家常就稀里糊涂的过去了。。。
可是这个结果呈现到HC的时候,他们很可能“不明真相”地理解为“做题速度不够”,
这是个巨大的负面因素呀,唉,不是没可能。

【在 g*********e 的大作中提到】
: 感觉是不是做题速度还不够?
: 第三轮和第五轮都只做了一道简单题。是behavior花时间太多了么?

avatar
l*r
25
恩,第三轮和第五轮确实是做题偏少。其实我感觉这两轮做题的速度还可以,第三轮中
老美问了很多测试,直到结束。第五轮马上下班了,那老美心不在焉的样子,我也有点
累了,两个人就聊聊家常就稀里糊涂的过去了。。。
可是这个结果呈现到HC的时候,他们很可能“不明真相”地理解为“做题速度不够”,
这是个巨大的负面因素呀,唉,不是没可能。
谢谢你的建议!

【在 g*****i 的大作中提到】
: 有3轮都只有一道题,是不是速度不够?
: 前两轮的引申和提示如果能自己一开始就主动提出来也会更好。

avatar
l*r
26
我的解法请见22楼,呵呵,不对的地方请指正。

【在 d********i 的大作中提到】
: 请问第四轮的分子,分母那题怎么做啊?LC的divide two numbers变种?
avatar
y*u
27
G家实在太难了。。。

arr

【在 l*********r 的大作中提到】
: 背景:中部弱校master,去年五月毕业,刚工作一年(中部小公司),骑驴找马中。
: Onsite一共五轮:
: --------------------------------------
: 第一轮(中东人):
: 给一个字符串,让压缩并解压,压缩算法类似leetcode中的count and say
: 输入:aabbbccd 压缩结果:2a3b2cd(注意,'d'前面没有'1')
: 引申:输入中如果有数字的话,解压时需要注意歧义问题,例如2a可以解压为'2a'或
: 者'aa',问如何解决。答曰用类似ascii码中加反斜杠的做法,或者加个header来标
: 志压缩过的位,表示同意。
: 第二轮(老印):

avatar
r*g
28
对第四轮

public static String getDecimal(int a, int b){
if(a == 0)
return "0.0";
if(b == 0)
return "";

StringBuilder res = new StringBuilder();
res.append(a/b);
res.append(".");
int c = a;
HashMap mod = new HashMap();
ArrayList decimals = new ArrayList();

int index=0;
while(c%b !=0 && !mod.containsKey(c%b)){
mod.put(c%b, index);
c = c%b*10;
decimals.add(c/b);
index++;
}

if(c%b==0){
for(int i=0; ires.append(decimals.get(i));
}
res.append("(0)");
}else{
index = mod.get(c%b);
for(int i=0; ires.append(decimals.get(i));
}
res.append("(");
for(int i=index; ires.append(decimals.get(i));
res.append(")");
}
return res.toString();
}
avatar
g*e
29

pat pat
其实跟面试官交流太多都是浪费时间,短时间内给出正确最优解,争取多做几道最管用
。不过碰到有人用testcase死缠你,也没办法,稍微磨蹭磨蹭45分钟就过去了。

【在 l*********r 的大作中提到】
: 恩,第三轮和第五轮确实是做题偏少。其实我感觉这两轮做题的速度还可以,第三轮中
: 老美问了很多测试,直到结束。第五轮马上下班了,那老美心不在焉的样子,我也有点
: 累了,两个人就聊聊家常就稀里糊涂的过去了。。。
: 可是这个结果呈现到HC的时候,他们很可能“不明真相”地理解为“做题速度不够”,
: 这是个巨大的负面因素呀,唉,不是没可能。
: 谢谢你的建议!

avatar
c*2
30
请问G家店面挂了有冷冻期么

【在 l*********r 的大作中提到】
: 我的解法请见22楼,呵呵,不对的地方请指正。
avatar
S*1
31
//6:24 6:40
String divide(int a, int b) {
String res = "";
if (b == 0)
return res;
if (a == 0)
return "0";

if (a < 0 && b > 0 || a > 0 && b < 0)
res += "-";

a = a < 0 ? -a : a;
b = b < 0 ? -b : b;

res = res + Integer.toString(a/b) + ".";
a -= (a/b)*b;

Map posMap = new HashMap();
List arr = new ArrayList();
while (!posMap.containsKey(a)) {
posMap.put(a, arr.size());
arr.add((a*10)/b);
a = (a*10)%b;
}

int stopPos = posMap.get(a);
for (int i = 0; i < arr.size(); i++) {
if (i == stopPos)
res += "(";
res += Integer.toString(arr.get(i));
}

res += ")";

return res;
}
avatar
d*i
32
解法: Fraction To Decimal结合Longest Substring Without Repeating Characters
变种
测试:
System.out.println(fractionToDecimal(2, 4)); // 0.5
System.out.println(fractionToDecimal(1, 3)); // 0.(3)
System.out.println(fractionToDecimal(1, 7)); // 0.(142857)
代码:
public static String fractionToDecimal(int numerator, int denominator) {
String res = "0.";
while (numerator != 0) {
int tmp = (numerator * 10) / denominator;
res = res + Integer.toString(tmp);
numerator = (numerator * 10) % denominator;
if (res.length() > 20) {
return "0." + "(" + longestSubstringWithoutRepeatingCharacters(res.
substring(2)) + ")";
}
}
return res;
}
public static String longestSubstringWithoutRepeatingCharacters(String s) {
boolean[] hash = new boolean[256];
int maxlen = 0;
int left = 0;
int right = 0;
while (right < s.length()) {
if (!hash[s.charAt(right)]) {
hash[s.charAt(right)] = true;
} else {
maxlen = Math.max(maxlen, right - left);
while (s.charAt(left) != s.charAt(right)) {
hash[s.charAt(left)] = false;
left++;
}
left++;
}
right++;
}
return s.substring(left - 1, right - 1);
}
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。