8.30携程笔试

试卷:算法工程师(NLP方向)

选择里面涉及了Transformer,tree,神经网络参数计算等。这些还算正常。

编程4个题。
1. q次询问,每次输入一个数,要求把这个数重新排列称为偶数。全过了贴一下代码。
def change(num):
    x = int(num)
    if x % 2 == 0:
        return x
    else:
        flag = False
        arr = list(num)
        n = len(arr)
        for i in range(n):
            if int(arr[i]) % 2 == 0:
                arr[i], arr[-1] = arr[-1], arr[i]
                flag = True
                break
        if flag:
            return int("".join(arr))
        else:
            return -1


q = int(input())
for i in range(q):
    x = input()
    res = change(x)
    print(res)


2. n次输入每次输入三个数分别代表y\o\u的个数,you算两分,oo一分,问排列最多多少分。
思路:最先排列you然后把o都连起来,有多少连接就算多少分。全过了贴一下代码。
def spell(a,b,c):
    mini = min(a,b,c)
    you = 2*mini
    a,b,c = a-mini,b-mini,c-mini
    if b == 0:
        return you
    else:
        return you+b-1

q = int(input())
for i in range(q):
    a,b,c = map(int,input().split())
    res = spell(a,b,c)
    print(res)

3. 第三题有点难度了,想了半天不知道要用bfs还是拓扑,问题是n个结点,每个结点为red,green,blue三种颜色,问如果删除边可以使两部分中均有rgb,输出合法边的个数,这题让我想到了BST。。。
好像是没有a,贴一下代码,如果有大佬请赐教!!!
n = int(input())
s = input()
dic = {}
for i in range(n-1):
    u,v = map(int,input().split())
    if u not in dic:
        dic[u] = [v]
    else:
        dic[u].append(v)
queue = [[1]]
color = set()
res = 0
while queue:
    lst = queue.pop(0)
    while lst:
        node = lst.pop(0)
        if node in dic:
            queue.append(dic[node])
        if s[node-1] not in color:
            color.add(s[node-1])
        if len(color) == 3:
            res+=1
            color.clear()
print(res)

4. 输入一个数组。平滑值为相邻数直接的差的最大值,求修改数组中一个数字或者不修改,平滑值最小为多少。
思路:找到相差最大的数的index与差,然后根据大小去修改原arr数组。
n = int(input())
arr = list(map(int,input().split()))
dif = [0]*(n-1)
maxdis = 0
maxidx = -1
for i in range(n-1):
    dif[i] = arr[i+1]-arr[i]
    if dif[i]>maxdis:
        maxdis = dif[i]
        maxidx = i
if maxidx == 0:
    arr[0] = arr[1]
elif maxidx == n-2:
    arr[-1] = arr[-2]
else:
    left,right = arr[maxidx-1],arr[maxidx+1]
    arr[maxidx] = (right+left)//2
res = 0
for i in range(n-1):
    dis = arr[i+1]-arr[i]
    if dif[i]>res:
        res = dis
print(res)




#携程笔试##携程#
全部评论
老哥,笔试是晚上7点吗
点赞 回复 分享
发布于 2022-09-13 13:44 陕西

相关推荐

今天要投简历吗? 国庆期间真的不投比较好吗? emmmmmm
想要offer的每一...:可以去投,谁回你,你就拉黑他,国庆还上班,贼黑心
我的秋招日记
点赞 评论 收藏
分享
评论
6
16
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务