美文网首页
IOS 算法(基础篇) ----- 相对名次

IOS 算法(基础篇) ----- 相对名次

作者: ShawnAlex | 来源:发表于2021-12-02 14:20 被阅读0次

给你一个长度为 n 的整数数组 score ,其中 score[i] 是第 i 位运动员在比赛中的得分。所有得分都 互不相同 。运动员将根据得分 决定名次 ,其中名次第 1 的运动员得分最高,名次第 2 的运动员得分第 2 高,依此类推。运动员的名次决定了他们的获奖情况:
名次第 1 的运动员获金牌 "Gold Medal" 。
名次第 2 的运动员获银牌 "Silver Medal" 。
名次第 3 的运动员获铜牌 "Bronze Medal" 。
从名次第 4 到第 n 的运动员,只能获得他们的名次编号(即,名次第 x 的运动员获得编号 "x")。
使用长度为 n 的数组 answer 返回获奖,其中 answer[i] 是第 i 位运动员的获奖情况。
n == score.length
1 <= n <= 104
0 <= score[i] <= 106
score 中的所有值 互不相同

题目稍微解释下, 其实就是处理一个分数数组, 分数由大到小

  • 分数第一: 返回 Gold Medal
  • 分数第二: 返回 Silver Medal
  • 分数第三: 返回 Bronze Medal
  • 分数第四: 返回 4
  • 分数第五: 返回 5
    ...

用哈希法以分数做key, 排名做value 维护哈希表,(一对对键值对 key-value, 无序的)
以 score = [10,3,8,9,4] 举例, 形成的哈希表为
[
3: "5",
8: "Bronze Medal",
9: "Silver Medal",
4: "4",
10: "Gold Medal"
]

再遍历score按哈希表返回即可

未翻译版

    func findRelativeRanks(_ score: [Int]) -> [String] {

        var res = [String](), dic = [Int:String]()
        let temp = score.sorted(by: >), a = ["Gold Medal", "Silver Medal", "Bronze Medal"]
        
        for i in 0..<temp.count {
            
            if (i < 3) {
                dic[temp[i]] = a[i]
                continue
            }
            
            dic[temp[i]] = String(i + 1)
        }
        
        for i in score {
            res.append(dic[i]!)
        }
        
        return res;

    }

翻译版

    func findRelativeRanks(_ score: [Int]) -> [String] {

        // 定义返回结果res, 哈希表dic
        var res = [String](), dic = [Int:String]()
        // 定义temp为倒序数组, a 为前三个字符串
        let temp = score.sorted(by: >), a = ["Gold Medal", "Silver Medal", "Bronze Medal"]
        
        // 遍历倒序数组temp
        for i in 0..<temp.count {
            
            // 以 [分数:排名] 做哈希表
            if (i < 3) {
                dic[temp[i]] = a[i]
                continue
            }
            
            dic[temp[i]] = String(i + 1)
        }
        
        // 遍历score 按表返回
        for i in score {
            res.append(dic[i]!)
        }
        
        // 返回结果
        return res;

    }

精简版

利用swift自带函数优化下代码

    func findRelativeRanks(_ score: [Int]) -> [String] {
        let temp = score.sorted(by: >), 
            a = ["Gold Medal", "Silver Medal", "Bronze Medal"]
        var dic = [Int:String]()
        for (i, score) in temp.enumerated() {   
            if (i < 3) {
                dic[score] = a[i]
                continue
            }
            dic[score] = String(i + 1)
        }
        return score.map{ dic[$0]! }

    }

题目来源:力扣(LeetCode) 感谢力扣爸爸 :)
IOS 算法合集地址

相关文章

  • IOS 算法(基础篇) ----- 相对名次

    给你一个长度为 n 的整数数组 score ,其中 score[i] 是第 i 位运动员在比赛中的得分。所有得分都...

  • 「算法」506. 相对名次

    给你一个长度为 n 的整数数组 score ,其中 score[i] 是第 i 位运动员在比赛中的得分。所有得分都...

  • 相对名次

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/relati...

  • iOS 动画基础总结篇

    iOS 动画基础总结篇 iOS 动画基础总结篇

  • IOS 算法(基础篇) ----- 基础索引

    今天分享一道基础中的基础算法题, 给大家分享一下 如果你想知道什么题? 既然你诚心诚意的发问了, 我就大发慈悲...

  • 506-相对名次

    1、最简单的是暴力求解,两层循环: 2、通过map来对元素进行排序,second中存放元素的索引。map默认从小到...

  • 506-相对名次

    相对名次 题目 给出 N 名运动员的成绩,找出他们的相对名次并授予前三名对应的奖牌。前三名运动员将会被分别授予 “...

  • IOS 算法(基础篇) ----- 拼写单词

    给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars。假如你可以用 chars 中...

  • IOS 算法(基础篇) ----- 除数博弈

    今天看一道算法题, 我第一次遇到这种题, 真是考验数学啊 如果你想知道什么题? 既然你诚心诚意的发问了, 我就...

  • IOS 算法(基础篇) -----种花问题

    假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会...

网友评论

      本文标题:IOS 算法(基础篇) ----- 相对名次

      本文链接:https://www.haomeiwen.com/subject/akbyxrtx.html