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)