依图科技算法工程化日常实习一面
时长大约1个小时
开头是自我介绍,然后和面试官聊了一下自己用的语言,还有自己是统计学专业的,所以科班知识比较少
上来是手撕一道代码:最长无重复子串,要求输出子串
一开始思路是:用左指针和右指针去定位现在检索的子串,如果右指针指的子串在字典中,就比较一下最长长度和左右指针的间距。
如果更长的话,就更新最长长度以及记录最长子串位置的start和end,再将左指针更新成重复字符在字典中的索引,右指针等于左指针,重置字典。
不在字典中的话,就把字符和索引放入字典,右指针移动一个位置。有个临界条件,当右指针到字符串最后的时候,还需要比较一下和最长长度的距离,然后更新。
我的基础一般,所以一开始想的是左指针每次动一次,然后写着写着发现可以直接挪到字典中的右指针位置,所以大概花了20分钟左右。
之后的话就是类似像智力题这样子
第一题是甲乙扔硬币,扔到正面获胜,甲先扔,获胜概率?这题秒回答了2/3。算是涉及到自己专业的概率论知识,比较简单,一个等比收敛求和就可以了。
第二题是1到100这些数,然后随机抽掉一个数,再打乱放入一个数组中,问怎么找到这个抽掉的数?
第二题和第一题类似,然后抽掉两个数。一开始思路也是类似,知道x+y的总和,然后是求不定方程解就可以了,枚举检索一下。
面试官说还有没有更快的一点,我说快排然后直接找,他说这个复杂度比你上一个还要高。
之后就是说应该是还需要在找一个关于x、y的条件然后把他算出来,后来面试官提示了一下你第一题用的加法,是不是乘法也可以,然后就知道了可以直接累乘得出xy的值,解一元二次方程就行了。
最后就聊了一下自己的项目,还有关于如果入职以后的一些问题和对我的建议。
总体感觉面试官很好,但是自身能力上确实和科班有差距,之后加油吧。
上午刚刚面完,再等二面消息。
附上自己的代码(有更好的思路欢迎分享):
1 def findstr(s): 2 n = len(s) 3 if n < 2: 4 return s 5 start = 0;end = 0 6 lp = 0;rp = 0 7 ans = 0 8 dic = {} 9 while rp < n: 10 if s[rp] in dic: 11 if rp - lp > ans: 12 ans = max(ans, rp - lp) 13 start = lp 14 end = rp - 1 15 lp = dic[s[rp]] + 1 16 rp = lp 17 dic = {} 18 else: 19 dic[s[rp]] = rp 20 rp += 1 21 if rp == n - 1 and s[rp] not in dic and rp - lp + 1 > ans: 22 ans = max(ans, rp - lp + 1) 23 start = lp 24 end = rp 25 return s[start:end+1]

浙公网安备 33010602011771号