9.14米哈游笔试

试卷:NLP开发第二批

选择题主要还是包括了一些NLP,机器学习,数学概率、数据结构等知识。

编程一共三道。

1. 矩阵非对角线上的数顺时针旋转90°,两个对角线上的数逆时针旋转90°。
思路:直接看代码吧,ac了。利用一些指针操作,对矩阵的数进行交换。
n = int(input())
arr = []
for i in range(n):
    arr.append(list(map(int, input().split())))
for i in range(n):
    for j in range(i,n):
        if i == j:
            continue
        else:
            arr[i][j],arr[j][i] = arr[j][i],arr[i][j]
for k in range(n):
    i,j = 0,n-1
    while i<j:
        arr[k][i],arr[k][j] = arr[k][j],arr[k][i]
        i+=1
        j-=1
p,q = 0,n-1
while p < q:
    arr[p][p],arr[q][q] = arr[q][q],arr[p][p]
    p+=1
    q-=1
for k in range(n//2):
    arr[k][n-1-k],arr[n-1-k][k] = arr[n-1-k][k],arr[k][n-1-k]
for k in range(n):
    res = list(map(str, arr[k]))
    print(" ".join(res))

2. 两个数组分别代表攻击和耐久。问攻击在一个[L,R]区间内的对应耐久和是多少。
思路:这题感觉不用求和么?反正我是超时了没通过,但是思路就是获取index直接返回累加的和即可。
def help(arr, l ,r):
    idx1, idx2 = -1, -1
    for i,x in enumerate(arr):
        if x[0]<l:
            idx1 = i
        if x[0] <= r:
            idx2 = i
    if (idx1 == -1 and idx2 == -1)&nbs***bsp;(idx1 == len(arr)-1 and idx2 == len(arr)-1):
        return 0
    elif idx1 == -1:
        return arr[idx2][1]
    else:
        return arr[idx2][1] - arr[idx1][1]
n, t = map(int, input().split())
arr1 = list(map(int, input().split()))
arr2 = list(map(int, input().split()))
arr = []
for i in range(n):
    arr.append([arr1[i],arr2[i]])
arr.sort(key=lambda x:x[0])
for i in range(1,n):
    arr[i][1] += arr[i-1][1]
print(help(arr,7,9))

3. 一颗n个节点的树,相同奇偶的为一个连通块。问以x为根的这棵树所有的连通块的个数。给了结点之间的连接。
思路:这没时间了,凌晨做题也太晕了完全就是瞎写。。。代码可以略过。思路可能是用递归吧。
def help(matrix, x, used):

    used[x-1] = True
    lst = matrix[x-1]
    for i,num in enumerate(lst):
        if num == 1 and not used[num-1]:
            used[num-1] = True
            if (x+num)%2 == 0:
                res = help(matrix,num,used)
            else:
                res = help(matrix,num,used)+1
            used[num-1] = False
        else:
            continue
    return res
n,x = map(int,input().split())
matrix = [[0 for _ in range(n)] for _ in range(n)]
for i in range(n-1):
    u,v = map(int,input().split())
    matrix[u-1][v-1] = 1
    matrix[v-1][u-1] = 1
used = [False]*n
print(help(matrix,x,used))
def help(matrix, x, used):
    res = 1
    used[x-1] = True
    lst = matrix[x-1]
    for i,num in enumerate(lst):
        if num == 1 and not used[num-1]:
            used[num-1] = True
            if (x+num)%2 == 0:
                res = help(matrix,num,used)
            else:
                res = help(matrix,num,used)+1
            used[num-1] = False
        else:
            continue
    return res

求米哈游高抬贵手~


#米哈游##米哈游笔试##米哈游23秋招笔试心得体会#
全部评论
第二题前缀和+二分可以AC
1 回复 分享
发布于 2022-09-15 11:19 上海
第二题直接算0%了,用前缀和62%,估计还是TL的问题之后不知道怎么优化了放弃了
点赞 回复 分享
发布于 2022-09-14 22:07 北京
第二个我用的前缀和,只过了38%,内存超了,后来感觉应该用二分来确定l和r
点赞 回复 分享
发布于 2022-09-14 22:11 北京
第一题简单,第二题二分前缀100,第三题看错题了,题干有误导行
点赞 回复 分享
发布于 2022-09-15 15:43 上海

相关推荐

10-18 13:01
已编辑
西安理工大学 C++
小米内推大使:建议技能还是放上面吧,hr和技术面试官第一眼想看的应该是技能点和他们岗位是否匹配
点赞 评论 收藏
分享
1 15 评论
分享
牛客网
牛客企业服务