拼多多算法岗100 100 100 30

第一题用的python内置sort
line = input()
nums = line.split(';')[0]
nums = list(map(int,nums.split(',')))
n = int(line.split(';')[1])

ji = []
ou = []
for num in nums:
    if num&1==1:
        ji.append(num)
    else:
        ou.append(num)
ji.sort()
ji.reverse()
ou.sort()
ou.reverse()
if len(ou)>=n:
    ans = ou[:n]
else:
    ans = ou + ji[:n-len(ou)]
ans = list(map(str,ans))
print (','.join(ans))
第二题回溯,深度优先搜索
s = int(input())
def cmp(s1,s2):
    if len(s1)!=len(s2):
        return False
    for i in range(len(s1)):
        if s1[i]!=s2[i]:
            return False
    return True
for i in range(s):
    nums = [char for char in input()]
    news = [char for char in input()]
    n = len(nums)
    paths = []
    def search(nums,luans,news,path,n):
        if n == 0:
            if cmp(luans,news):
                paths.append(path)
            return
        num = nums[0]
        nums = nums[1:]
        search(nums,luans,news,path+['d'],n-1)
        search(nums,[num]+luans,news,path+['l'],n-1)
        search(nums,luans+[num],news,path+['r'],n-1)
    search(nums,[],news,[],n)
    print ('{')
    for path in paths:
        print (' '.join(path))
    print ('} ')
第三题是dp的思路
n = int(input())#多少骰子
nums = list(map(int,input().split()))#每个骰子的可能结果数

ans = [[0 for i in range(51)] for j in range(50)]#初始化结果
maxnum = 0
for x in range(1,nums[0]+1):#初始化第1次的结果
    ans[0][x] = 1
    maxnum = max(maxnum,nums[0])
for i in range(1,n):#每个骰子
    maxnum = max(maxnum,nums[i])
    
    for j in range(1,maxnum+1):#可能的取值
        if nums[i]>=j:#如果当前数值小于当前能取到的最大值
            ans[i][j] = sum(ans[i-1][:j+1])+(j-1)*ans[i-1][j]
        else:#如果当前数值大于当前能取到的最大值
            ans[i][j] = ans[i-1][j] * nums[i]
        
all_ = 0
all_num = 0
for i in range(1,51):
    all_ += ans[n-1][i]
    all_num += ans[n-1][i]*i
print ('%.2f'%(all_num/all_))

第四题leetcode类似题,但是二分查找没实现出来,暴力排序取第k个做的 30%
line = list(map(int,input().split()))
n,m,k = line[0],line[1],line[2]
ans = [[(i+1)*(j+1) for j in range(m)] for i in range(n)]
nums = []
for a in ans:
    nums.extend(a)
nums.sort()
nums.reverse()
print (nums[k])




#笔经##拼多多##笔试题目#
全部评论
太强了
点赞 回复 分享
发布于 2019-09-01 17:31
第四题就是leetcode 668题
点赞 回复 分享
发布于 2019-09-01 19:22
点赞 回复 分享
发布于 2019-09-01 17:15
第四个 java有优先队列 然后80
点赞 回复 分享
发布于 2019-09-01 17:18
求大佬们帮忙看一下第二题,我用的是DFS,我在自己的IDE,case全过了,但是提交后零分,不知道是什么问题 import sys if __name__ == "__main__":     s = int(sys.stdin.readline().strip())     if s==0:         print('{')         print('}')     for _ in range(s):         girl=sys.stdin.readline().strip()         boy=sys.stdin.readline().strip()         res=[]         def helper(girl,girl_new,way):             if len(girl_new)>len(boy):                 return             if ''.join(girl_new)==boy:                 res.append(way)                 return             if len(girl)>0:                 helper(girl[1:],girl_new,way+['d'])                 helper(girl[1:],[girl[0]]+girl_new,way+['l'])                 helper(girl[1:],  girl_new+[girl[0]], way+['r'])         helper(girl,[],[])         print('{')         if res:             res=sorted(res)             for r in res:                 print(' '.join(r)+' ')         print('}')
点赞 回复 分享
发布于 2019-09-01 17:19
大佬第二题直接暴力深度,不用优化也能全对吗
点赞 回复 分享
发布于 2019-09-01 17:23
第二题回溯只过了77.78% 哭了
点赞 回复 分享
发布于 2019-09-01 17:27
6666666
点赞 回复 分享
发布于 2019-09-01 17:34
第三题能解释一下DP思想吗,谢谢
点赞 回复 分享
发布于 2019-09-01 18:53
第二题小梅那个是不是抽出的牌中可能有重复的?
点赞 回复 分享
发布于 2019-09-01 19:17
谢谢大腿分享,
点赞 回复 分享
发布于 2019-09-01 19:50

相关推荐

我已成为0offer的糕手:别惯着,胆子都是练出来的,这里认怂了,那以后被裁应届被拖工资还敢抗争?
点赞 评论 收藏
分享
vegetable_more_exercise:1-1.5万,没错啊,最少是1人民币,在区间内
点赞 评论 收藏
分享
评论
15
99
分享
牛客网
牛客企业服务