
*TLDR:
Input:
bids = list of lists of ints representing [userid, # shares, $bid, TIMESTAMP] < /p>
TotalShares = Gesamtzahl der Aktien, die verteilt werden sollen. Aktienverteilungslogik: 1) Bieter mit höchstem Angebot erhält alle Aktien, für die sie bieten, und dann 2) Wenn es Krawatten des $ -Botungs -Preises gibt, weisen Sie den früheren Bieter die Aktien zu, für die obige Frage, dass die Lösung, die ich mir ausgedacht habe, relativ einfach ist, aber es scheint alle Kantenfälle zu verabschieden, an die ich denken kann. Die einzige fragwürdige Situation, die ich mir vorstellen kann, ist wie < /p>
Gebotspreis und Zeiten sind gleich und es gibt nicht genug Aktien für alle Bieter, dh Gebote = [0,2,10,0], [1,2,10,0] und TotalShares = 2. Ich bin unklare, wenn 1 uld. /> sieht jemand, ob meine Lösung sowieso optimiert werden kann? < /p>
Code: Select all
def getUnallocatesUsers(bids, totalShares):
s = 0
for b in bids:
s += b[1]
if totalShares >= s: return [] # no losers because enough shares to go around
bids.sort(key = lambda x: (-x[2],x[3])) # sort by highest bid, then timestamp for ties
losers = []
for b in bids:
if totalShares