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)
思路:最先排列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)
好像是没有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)