360笔试第二题解法,贪心算法

360笔试第二题


n,m = 10,5
a1,a2 = [4,4,1,2,2,4,3,2,0,2],[4,3,2,1,0,4,3,2,1,1]
ans = ''
a1 = [i%m for i in a1]
a2 = [i%m for i in a2]
k = 1
while a1:#按步将sum = m-1,sum=m-2...的挑出来,直到a1为空
    res = set([(m-k-i)%m for i in a1])
    print('a1:',a1,'a2:',a2, 'minus:',res,'sum:',m-k)
    for u in res:
        v = (m-k-u)%m
        if u in a2:
            t = min(a2.count(u),a1.count(v)) #v+u = m-k,u,v都要分别a2,a1中,取最小
            ans += str(m-k)*t
            for _ in range(t):#移除t次
                a2.remove(u)
                a1.remove(v)
    print('str:',ans,'a1:',a1,'a2:',a2)
    k+=1
print(ans,len(ans))
print(list(map(int,ans)))



运行结果:




#360公司##笔试题目##春招#
全部评论
你在AC了嘛
点赞 回复
分享
发布于 2019-08-15 22:13

相关推荐

1 9 评论
分享
牛客网
牛客企业服务