其他分享
首页 > 其他分享> > leetcode(力扣) 506. 相对名次 (哈希表)

leetcode(力扣) 506. 相对名次 (哈希表)

作者:互联网

题目在这:https://leetcode-cn.com/problems/relative-ranks/

题目分析:

这道题我一开始没看懂,导致做错。。

简单的说一下题目。
给了一个数组 s 。s[i]代表下标为i的人得到的分数.

比如 s[i] = [6,3,9,1] 则 第0号人得分6分,第1号人得分3分,第2号人得分9分,第3号人得分1分
分数越高,排名越高, 所以 这道题应该得到答案(银牌,铜牌,金牌,4)
这里的 4 代表第四名。

思路分析:

如果数组长度小于等于3。则我们直接找到金银铜牌分给他们就行了。

对于长度大于3的数组而言。建立哈希表,key存元素,value存对应下标。
这样我们对元素排序。然后遍历哈希表,由于元素已经有序,且其带着对应的下标,所以可以很轻松的根据索引分金银铜牌和排名。

代码写的异常啰嗦,大家根据上面的思路自行写。。。

仅供参考~

完整代码

class Solution:
    def findRelativeRanks(self, score: List[int]) -> List[str]:
        from collections import Counter

        hash_score = {}

        if len(score) <=3:
            max_ = max(score)
            min_ = min(score)
            if len(score) == 2:
                for j in range(len(score)):
                    if score[j] == max_:
                        score[j] = "Gold Medal"
                    else:
                        score[j] = "Silver Medal"
                return score
            for m in range(len(score)):
                if score[m] == max_:
                    score[m] = "Gold Medal"
                elif score[m] == min_:
                    score[m] = "Bronze Medal"
                else:
                    score[m] = "Silver Medal"
            return score

        for index,key in enumerate(score):
            hash_score[key] = index
        hs = sorted(hash_score.items(),key=lambda x:x[0])
        # 字典排序 按 key排
        score[hs[-1][1]] = "Gold Medal"
        score[hs[-2][1]] = "Silver Medal"
        score[hs[-3][1]] = "Bronze Medal"

        for i in range(len(hs)-4,-1,-1):
            print(hs[i])   # 索引为 hs[i][1]
            score[hs[i][1]] = str(len(score)-i)  # 给当前索引赋值

        return score

标签:得分,下标,数组,力扣,score,哈希,506,铜牌
来源: https://blog.csdn.net/qq_38737428/article/details/120580998