[Swift]LeetCode506. 相对名次 | Relative Ranks
发布时间:2020-12-14 05:11:00 所属栏目:百科 来源:网络整理
导读:Given scores of?N?athletes,find their relative ranks and the people with the top three highest scores,who will be awarded medals: "Gold Medal","Silver Medal" and "Bronze Medal". Example 1: Input: [5,4,3,2,1]Output: ["Gold Medal","Silver Me
Given scores of?N?athletes,find their relative ranks and the people with the top three highest scores,who will be awarded medals: "Gold Medal","Silver Medal" and "Bronze Medal". Example 1: Input: [5,4,3,2,1] Output: ["Gold Medal","Silver Medal","Bronze Medal","4","5"] Explanation: The first three athletes got the top three highest scores,so they got "Gold Medal","Silver Medal" and "Bronze Medal". ?Note:
? 给出?N?名运动员的成绩,找出他们的相对名次并授予前三名对应的奖牌。前三名运动员将会被分别授予 “金牌”,“银牌” 和“ 铜牌”("Gold Medal","Bronze Medal")。 (注:分数越高的选手,排名越靠前。) 示例 1: 输入: [5,1] 输出: ["Gold Medal","5"] 解释: 前三名运动员的成绩为前三高的,因此将会分别被授予 “金牌”,“银牌”和“铜牌” ("Gold Medal","Silver Medal" and "Bronze Medal"). 余下的两名运动员,我们只需要通过他们的成绩计算将其相对名次即可。 提示:
1 class Solution { 2 func findRelativeRanks(_ nums: [Int]) -> [String] { 3 var arr:[Int] = nums 4 //降序排序 5 arr = arr.sorted(by: >) 6 let len:Int = nums.count 7 var res:[String] = Array(repeating: "",count: len) 8 9 //从nums中寻找与arr[j]相同元素,在res中对应位置赋值为j+1,j=0,1,2时特殊处理 10 for i in 0..<len 11 { 12 for j in 0..<len 13 { 14 if nums[i] == arr[j] 15 { 16 //整个switch语句在第一个匹配switch案例完成后立即完成其执行,而不需要显式break语句。 17 //尽管break在Swift中不需要,但您可以使用break语句来匹配和忽略特定情况,或者在该情况完成执行之前中断匹配的情况。 18 switch j 19 { 20 case 0: 21 res[i] = "Gold Medal" 22 case 1: 23 res[i] = "Silver Medal" 24 case 2: 25 res[i] = "Bronze Medal" 26 default: 27 res[i] = String(j + 1) 28 } 29 break 30 } 31 } 32 } 33 return res 34 } 35 } 48ms 1 class Solution { 2 func findRelativeRanks(_ nums: [Int]) -> [String] { 3 guard nums.count > 0 else { 4 return [] 5 } 6 var index = [Int:Int]() 7 for i in 0..<nums.count { 8 index[nums[i]] = i 9 } 10 let sorted = nums.sorted(by: >) 11 var rank = [String](repeating: "",count: nums.count) 12 for i in 0..<sorted.count { 13 if let idx = index[sorted[i]] { 14 if i == 0 { 15 rank[idx] = "Gold Medal" 16 } else if i == 1 { 17 rank[idx] = "Silver Medal" 18 } else if i == 2 { 19 rank[idx] = "Bronze Medal" 20 } else { 21 rank[idx] = String(i+1) 22 } 23 } 24 25 } 26 return rank 27 } 28 } 44ms 1 class Solution { 2 func findRelativeRanks(_ nums: [Int]) -> [String] { 3 let arr = nums.sorted(by: >) 4 var res = [String]() 5 var dict = [Int:String]() 6 for i in 0..<arr.count { 7 if i == 0 { 8 dict[arr[i]] = "Gold Medal" 9 } else if i == 1 { 10 dict[arr[i]] = "Silver Medal" 11 } else if i == 2 { 12 dict[arr[i]] = "Bronze Medal" 13 } else { 14 dict[arr[i]] = "(i+1)" 15 } 16 } 17 for i in nums { 18 res.append(dict[i]!) 19 } 20 return res 21 } 22 } 80ms 1 class Solution { 2 func findRelativeRanks(_ nums: [Int]) -> [String] { 3 var nums2 = nums.sorted() 4 return nums.map({ (num) -> String in 5 var left = 0 6 var right = nums.count - 1 7 while left < right { 8 let mid = left + (right - left) / 2 9 let val = nums2[mid] 10 if val > num { 11 right = mid 12 } else if val < num { 13 left = mid + 1 14 } else { 15 left = mid 16 break 17 } 18 } 19 20 var string = "" 21 if left == nums.count - 1 { 22 string = "Gold Medal" 23 } else if left == nums.count - 2 { 24 string = "Silver Medal" 25 } else if left == nums.count - 3 { 26 string = "Bronze Medal" 27 } else { 28 string = String(nums.count - left) 29 } 30 return string 31 }) 32 } 33 } 172ms 1 class Solution { 2 func findRelativeRanks(_ nums: [Int]) -> [String] { 3 let sortedNums = nums.sorted().reversed() 4 var ranks = ["Gold Medal","Silver Medal","Bronze Medal"] 5 ranks = nums.count > 3 ? ranks + (4..<nums.count+1).map{ return String($0) } : ranks 6 let dict = Dictionary(uniqueKeysWithValues: zip(sortedNums,ranks)) 7 return nums.map{ return dict[$0]! } 8 } 9 } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |