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)))
运行结果: