拼多多算法岗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])




#笔经##拼多多##笔试题目#
全部评论
第四题就是leetcode 668题
点赞 回复 分享
发布于 2019-09-01 19:22
太强了
点赞 回复 分享
发布于 2019-09-01 17:31
谢谢大腿分享,
点赞 回复 分享
发布于 2019-09-01 19:50
第二题小梅那个是不是抽出的牌中可能有重复的?
点赞 回复 分享
发布于 2019-09-01 19:17
第三题能解释一下DP思想吗,谢谢
点赞 回复 分享
发布于 2019-09-01 18:53
6666666
点赞 回复 分享
发布于 2019-09-01 17:34
第二题回溯只过了77.78% 哭了
点赞 回复 分享
发布于 2019-09-01 17:27
大佬第二题直接暴力深度,不用优化也能全对吗
点赞 回复 分享
发布于 2019-09-01 17:23
求大佬们帮忙看一下第二题,我用的是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
第四个 java有优先队列 然后80
点赞 回复 分享
发布于 2019-09-01 17:18
点赞 回复 分享
发布于 2019-09-01 17:15

相关推荐

来个厂收我吧:首先,市场侧求职我不是很懂。 但是,如果hr把这份简历给我,我会觉得求职人不适合做产品经理。 问题点: 1,简历的字体格式不统一,排版不尽如人意 2,重点不突出,建议参考star法则写个人经历 3,印尼官方货币名称为印度尼西亚卢比(IDR),且GMV690000印尼盾换算为305人民币,总成交额不高。 4,右上角的意向职位在发给其他公司时记得删除。 5,你所有的经历都是新媒体运营,但是你要投市场营销岗位,jd和简历不匹配,建议用AI+提示词,参照多个jd改一下经历内容。 修改建议: 1,统一字体(中文:思源黑体或微软雅黑,英文数字:time new romans),在word中通过表格进行排版(b站学) 2,校招个人经历权重:实习经历=创业经历(大创另算)>项目经历>实训经历>校园经历 3,请将项目经历时间顺序改为倒序,最新的放最上方。 4,求职方向不同,简历文字描述侧重点也需要不同。
点赞 评论 收藏
分享
程序员小白条:这比例牛逼,750:1
点赞 评论 收藏
分享
评论
15
99
分享

创作者周榜

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