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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深度不学习!!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值