人人算法岗三面凉经

先吐槽一下牛客网的面试系统,前两次面试都是考官不能听到我说话,结果后来发现是考官那边的问题,对于设备硬件的隐私设置这块并没有明显的提示说明。

一面:

第一次面试我先用手机登陆的面试房间,才能顺利沟通,然后答题是全用打字沟通的,唉

先自我介绍,后考了两道算法

第一道题给忘了

给一个数组一个目标值,求在该数组中,加和为目标值的两个数的所有数对的坐标,数组的元素不能重复使用

tar = 5
nums = [3, 5, 2, 6, 4, 8, 1]

def aaa(num):
    ddict = {}
    for i in range(0,len(num)):
        n = num[i]
        try:
            a = ddict[n]
            res.append([ddict[n][0],i])
        except:
            tmp = tar-n
            ddict[tmp] = [i,n]
            
aaa(nums)
print(res)

二面:

第一题:

实现函数 unzip:

参数传入                 返回
4d5e2d                    ddddeeeeedd
2x2c2v                    xxccvv
12x

这样的一道题,当时的代码:

test = '12x12c'
def unzip(x):
    ints = {'1','2','3','4','5','6','7','8','9','0'}
    res = ''
    res_tmp = []
    left = 0
    for i in range(0,len(x)-1):
        if (x[i] in ints and x[i+1] not in ints) or (x[i] not in ints and x[i+1] in ints):
            res_tmp.append(x[left:i+1])
            left = i+1
    res_tmp.append(x[left:])
    
    l = 0
    print(res_tmp)
    while l<len(res_tmp):
        a_int = int(res_tmp[l])
        a_str = res_tmp[l+1]
        for j in range(a_int):
            res = res+a_str
        l += 2
    return res
result = unzip(test)
print(result)

第二题:

一个升序数组,循环移动几位,得到新数组A,请设计一个查找算法,求k 是否 在 A中。

代码:

nums_ = [4,5,6,7,8,9,1,2]
tar_ = 5

def solusion(nums,tar):
    if tar<nums[0] and tar>nums[-1]:
        return False
    if tar==nums[0] or tar==nums[-1]:
        return True
    
    left = 0
    right = len(nums)-1
    def get_start(left_,right_):
        
        mid = int((left_+right_)/2)
        num_mid = nums[mid]
        if nums[mid]>nums[mid+1]:
            return mid+1
        elif nums[mid]>=nums[0]:#中点在最小值左侧
            res = get_start(mid,right_)
        elif nums[mid]<=nums[-1]:#中点在最小值右侧
            res = get_start(left_,mid)
        return res
    
    start = get_start(left,right) # 最小值的位置
    print(start,'-')

    if tar>=nums[0]:
        nums = nums[:start]
    elif tar<=nums[-1]:
        nums = nums[start:]
        
    left = 0
    right = len(nums)-1
    def get_t_or_f(left_,right_):
        if right_-left_==1:
            if tar not in {nums[left_],nums[right_]}:
                return False
        
        mid = int((left_+right_)/2)
        num_mid = nums[mid]
        if num_mid==tar:
            return True
        else
    final = get_t_or_f(left,right)
    
result = solusion(nums_,tar_)
print(result)

第三题:求一个字符串的最长回文子串

sstr = 'abcbcba'

def get_zchw(s):
    res = s[0]
    ss = '#'
    for i in range(0,len(s)):
        ss = ss+s[i]+'#'
    
    for i in range(3,len(ss)-3):
        if ss[i]=='#':
            left,right = i-1,i+2
        else:
            left,right = i,i+1
        
        n = 0
        while n<=i:
            if right-left<=len(res):
                left -= 2
                right += 2
                n += 2
                continue
            
            tmp = ss[left:right]
            if tmp==tmp[::-1]:
                if len(tmp)>len(res):
                    res = tmp
            left -= 2
            right += 2
            n += 2
        
        if len(ss)-i<int(len(res)/2)+1:
            break
        
    result = res.replace('#','')
    return result

ans = get_zchw(sstr)
print(ans)

 

三面:

这次面试时设备好了,顺利沟通。

开始自我介绍,然后聊了一些简历上的东西,后了解我在算法上的相关经历,确实在学校中的相关经历不足,更多的是在软件工程上面。

然后考了个题:

均匀硬币,

两人轮流抛

H,T

先抛到正面赢

先抛的人赢的概率

这类题真的不擅长,再加上在家用手机热点面试,途中断网两次,直接凉凉。

 

再吐槽一下人人网,二面约了两次,此一次我上线等了一个半小时,给hr发消息,好久回我抱歉刚才开会去了,不懂你开会跟面试官有啥关系呢,是面试官没有接到通知吗

当然实力不够说啥都像是在为自己辩解,就这样吧

 

很多都是凭记忆重写的,若有错误,恳请指出讨论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值