依图科技算法工程化日常实习一面
作者:互联网
时长大约1个小时
开头是自我介绍,然后和面试官聊了一下自己用的语言,还有自己是统计学专业的,所以科班知识比较少 上来是手撕一道代码:最长无重复子串,要求输出子串 一开始思路是:用左指针和右指针去定位现在检索的子串,如果右指针指的子串在字典中,就比较一下最长长度和左右指针的间距。 如果更长的话,就更新最长长度以及记录最长子串位置的start和end,再将左指针更新成重复字符在字典中的索引,右指针等于左指针,重置字典。 不在字典中的话,就把字符和索引放入字典,右指针移动一个位置。有个临界条件,当右指针到字符串最后的时候,还需要比较一下和最长长度的距离,然后更新。 我的基础一般,所以一开始想的是左指针每次动一次,然后写着写着发现可以直接挪到字典中的右指针位置,所以大概花了20分钟左右。 之后的话就是类似像智力题这样子 第一题是甲乙扔硬币,扔到正面获胜,甲先扔,获胜概率?这题秒回答了2/3。算是涉及到自己专业的概率论知识,比较简单,一个等比收敛求和就可以了。 第二题是1到100这些数,然后随机抽掉一个数,再打乱放入一个数组中,问怎么找到这个抽掉的数? 这个也算是秒回答,当时想着这题是不是要说算法,但是我自己脱口而出了5050减数组总和就可以了(从小刻在脑子里的5050)。然后反应过来这题面试官确实就是不想让我说代码的算法,要用数学知识回答。 第二题和第一题类似,然后抽掉两个数。一开始思路也是类似,知道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]
标签:rp,依图,dic,start,lp,ans,实习,工程化,指针 来源: https://www.cnblogs.com/menelaus/p/15731882.html