9.1 拼多多 笔试 算法岗位 3.35/4

总体是 1.0-0.75-0.6-1.0

1. 12345678找规律,不算难,根据矩阵中i,j的坐标判断matrix[i][j] 的值.  ac 1.0
n = int(input())
matrix = [[0]*n for i in range(n)]
if n%2 == 1:
    for i in range(n):
        for j in range(n):
            if i == n//2&nbs***bsp;j == n//2&nbs***bsp;i==j&nbs***bsp;i+j == n-1:
                continue
            if 0<=i<=n//2-1:
                if 0<=j<=i-1:
                    matrix[i][j] = 3
                elif i<=j<=n//2-1:
                    matrix[i][j] = 2
                elif n//2+1<=j<n-1-i:
                    matrix[i][j] = 1
                else:
                    matrix[i][j] = 8
            if n//2 <= i <= n-1:
                if 0<=j<=n-i-1:
                    matrix[i][j] = 4
                elif n-i-1<j<=n//2:
                    matrix[i][j] = 5
                elif n//2<=j<=i-1:
                    matrix[i][j] = 6
                else:
                    matrix[i][j] = 7

    for i in range(n):
        print(' '.join(list(map(str,matrix[i]))))

if n%2== 0:
    for i in range(n):
        for j in range(n):
            if i==j&nbs***bsp;i+j == n-1:
                continue
            if 0<=i<=n//2-1:
                if 0<=j<=i-1:
                    matrix[i][j] = 3
                elif i<=j<=n//2-1:
                    matrix[i][j] = 2
                elif n//2<=j<=n-1-i:
                    matrix[i][j] = 1
                else:
                    matrix[i][j] = 8
            if n//2 <= i <= n-1:
                if 0<=j<=n-i-1:
                    matrix[i][j] = 4
                elif n-i-1<j<n//2:
                    matrix[i][j] = 5
                elif n//2<=j<=i-1:
                    matrix[i][j] = 6
                else:
                    matrix[i][j] = 7
    for i in range(n):
        print(' '.join(list(map(str,matrix[i]))))
2. 先把1所在的每一块区域回溯计算得到面积,再判断每个0的4个方向1的面积,比对即可 ; 0.75
n,m = list(map(int, input().split()))
matrix = []
for i in range(n):
    matrix.append(list(map(int, input().split())))

res = []
all = sum([sum(x) for x in matrix])
def helper(i,j):
    if not (0<=i<=n-1 and 0<=j<=m-1):
        return
    if matrix[i][j] == 0:
        return
    if matrix[i][j] == 2:
        return
    res.append(1)
    matrix[i][j] = 2
    helper(i+1, j)
    helper(i-1, j)
    helper(i, j+1)
    helper(i, j-1)


def change(i,j,num,index):
    if not (0<=i<=n-1 and 0<=j<=m-1):
        return
    if matrix[i][j] == 0:
        return
    if type(matrix[i][j]) is not int:
        return

    matrix[i][j] = [num,index]
    change(i+1, j, num, index)
    change(i-1, j, num, index)
    change(i, j+1, num, index)
    change(i, j-1, num, index)

index = 1
for i in range(n):
    for j in range(m):
        res = []
        helper(i,j)
        num = sum(res)
        change(i,j,num,index)
        index += 1

def concat(i,j):
    tem = 0
    around = set()
    if 0<=i+1<=n-1:
        if matrix[i+1][j]!=0:
            if matrix[i+1][j][1] not in around:
                tem += matrix[i+1][j][0]
                around.add(matrix[i+1][j][1])
    if 0<=i-1<=n-1:
        if matrix[i-1][j]!=0:
            if matrix[i-1][j][1] not in around:
                tem += matrix[i-1][j][0]
                around.add(matrix[i-1][j][1])
    
    if 0<=j+1<=m-1:
        if matrix[i][j+1]!=0:
            if matrix[i][j+1][1] not in around:
                tem += matrix[i][j+1][0]
                around.add(matrix[i][j+1][1])
    
    if 0<=j-1<=m-1:
        if matrix[i][j-1]!=0:
            if matrix[i][j-1][1] not in around:
                tem += matrix[i][j-1][0]
                around.add(matrix[i][j-1][1])
    return tem
# for i in range(n):
#     print(matrix[i])
res = 0
around = set()

for i in range(n):
    for j in range(m):
        if matrix[i][j] == 0:
            tem = concat(i,j)
            # print(tem)
            if tem<all:
                res = max(tem+1,res)
            else:
                res = max(tem,res)
print(res)
3. 带负数的上限背包,没考虑负数,只考虑正数; 0.6
n,m = list(map(int, input().split()))
C = []
V = []
tem = 0
for i in range(n):
    ci, vi = list(map(int, input().split()))
    if ci == 0:
        tem+=vi
        continue
    C.append(ci)
    V.append(vi)



dp = [[tem]+[0]*(m) for _ in range(len(C)+1)]
for i in range(1,len(C)+1):
    for j in range(1,m+1):
        dp[i][j] = dp[i-1][j]
        if C[i-1]<=j:
            dp[i][j] = max(dp[i][j], dp[i-1][j-C[i-1]]+V[i-1])
print(dp[-1][-1])

4. 首先要除去m中的大公约数防止重复计算,然后回溯得到feature中所有的排列组合,再用n一个一个除即可,这里注意,如果是计数个组合,则相加,偶数个,则相减。 ac 1.0
n,m = list(map(int, input().split()))
feature = []
for i in range(m):
    feature.append(int(input()))
feature.sort()
i = 0
while i<=len(feature)-1:
    for j in range(i):
        if feature[i]%feature[j] == 0:
            feature.pop(i)
            i-=1
            break
    i+=1

res = 0
index = []
length = len(feature)
def get(start,tem):
    index.append(tem+[])
    for i in range(start,length):
        get(i+1,tem+[feature[i]])
get(0,[])
index.pop(0)
# print(index)
def product(nums):
    tem = 1
    for num in nums:
        tem*=num
    return tem

for ind in index:
    g = len(ind)
    tem = product(ind)
    k = n//tem
    print(ind,k)

    if g % 2 == 1:
        res+=k
    else:
        res-=k
print(res)

面试求捞。。。


#笔试题目##拼多多#
全部评论
拼多多算法岗有通知面试的吗?
点赞 回复 分享
发布于 2020-09-03 12:18
大佬,第四题我考虑到求全体排列组合了,但是没有想到最大公约数的问题 #
点赞 回复 分享
发布于 2020-09-01 21:12

相关推荐

面试官全程关摄像头1.自我介绍一下2.React和Vue哪个更熟悉一点3.你在之前那段实习经历中有没有什么技术性的突破(我只是实习了44天工作28天,我把我能说的都说了)4.你封装的哪个表单组件支不支持动态传值5.自己在实习阶段Vue3项目封装过hook吗6.hook有什么作用7.Vue2和Vue3的响应式区别(我说一个是proxy是拦截所有的底层操作,Object.defineProperty本身就是一个底层操作,有些东西拦截不了,比如数组的一些操作还有等等,面试官就说实在要拦截能不能拦截????我心想肯定不行呀,他的底层机制就不允许吧)8.pinia和vuex的区别(这个回答不出来是我太久没用了)9.pinia和zustand的区别,怎么选(直接给我干懵了)(我说react能用pinia吗&nbsp;&nbsp;他说要用的话也可以)10.渲染一万条数据,怎么解决页面卡顿问题(我说分页、监听滚轮动态加载,纯数据展示好像还可以用canvas画)(估计是没说虚拟表单,感觉不满意)11.type和interface的区别12.ts的泛型有哪些作用(我就说了一个结构相同但是类型不同的时候可以用,比如请求响应的接口,每次的data不同,这里能用一个泛型,他问我还有什么)13.你项目用的是React,如果让你再写一遍你会选择什么14.pnpm、npm、yarn的区别15.dependencies和devdependencies的区别总而言之太久没面试了,上一段实习的面试js问了很多。结果这次js一点没问,网络方面也没考,表现得很一般,但是知道自己的问题了&nbsp;&nbsp;好好准备,等待明天的影石360和周四的腾讯了&nbsp;&nbsp;加油!!!
解zj:大三的第一段面试居然是这样的结局
查看15道真题和解析
点赞 评论 收藏
分享
12-11 14:24
门头沟学院 Java
在debug的伊泽瑞...:我说怎么这么眼熟查看图片
点赞 评论 收藏
分享
评论
2
14
分享

创作者周榜

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