Python-49:红包运气排行榜

问题描述

小C参与了一场抢红包的游戏,现在他想要对所有参与抢红包的人进行一次运气排名。排名规则如下:抢到的金额越多,排名越靠前;如果两个人抢到的金额相同,则按照他们抢红包的顺序进行排名。比如,如果小C和小U抢到的金额相同,但小C比小U先抢,则小C排在小U前面。

代码

def solution(n: int, s: list, x: list) -> list:

    # PLEASE DO NOT MODIFY THE FUNCTION SIGNATURE

    # write code here

    assert n == len(s) == len(x)

    start = {}

    cnt = {}

    for i in range(n):

        if s[i] not in start.keys():

            start[s[i]] = i

        cnt[s[i]] = cnt.get(s[i], 0) + x[i]

    a = sorted(cnt.keys(), key=lambda s: (-cnt[s], start[s]))

    return a

if __name__ == '__main__':

    print(solution(4, ["a", "b", "c", "d"], [1, 2, 2, 1]) == ['b', 'c', 'a', 'd'])

    print(solution(3, ["x", "y", "z"], [100, 200, 200]) == ['y', 'z', 'x'])

    print(solution(5, ["m", "n", "o", "p", "q"], [50, 50, 30, 30, 20]) == ['m', 'n', 'o', 'p', 'q'])

你可能感兴趣的:(每日一练,python)