高手競技 比賽排名頒獎(排序應用) Leetcode_#506

閱讀時間約 3 分鐘

題目敘述

輸入給定一個整數陣列,分別代表每位運動員在比賽中的成績

分數最高的給予金牌"Gold Medal"
分數次高的給予金牌"Silver Medal"
分數第三高的給予金牌"Bronze Medal"
剩餘的名次依照順序給予"4", "5", ..., "n" 的編號

輸出時以字串陣列返回答案


原本的英文題目敘述


測試範例

Example 1:

Input: score = [5,4,3,2,1]
Output: ["Gold Medal","Silver Medal","Bronze Medal","4","5"]
Explanation: The placements are [1st, 2nd, 3rd, 4th, 5th].

Example 2:

Input: score = [10,3,8,9,4]
Output: ["Gold Medal","5","Bronze Medal","Silver Medal","4"]
Explanation: The placements are [1st, 5th, 3rd, 2nd, 4th].

約束條件

Constraints:

  • n == score.length

令n代表分數陣列的長度。

  • 1 <= n <= 10^4

n介於 1 ~ 一萬之間。

  • 0 <= score[i] <= 10^6

每位選手的分數介於0~一百萬之間。

  • All the values in score are unique.

每位選手的分數都不同,不會有同分的情況


演算法 排序

這題滿直覺的,題目已經保證不會有同分的情況

因此,直接對分數進行排序
冠軍拿金牌,亞軍拿銀牌,季軍拿銅牌,剩下的名次拿到對應的數字即可。


程式碼 排序

class Solution:
def findRelativeRanks(self, nums):

# 對分數由大到小進行排序
place = sorted(nums, reverse = True)

# 依照名次給對應的獎牌
prize = ["Gold Medal", "Silver Medal", "Bronze Medal"] + list(map(str, range(4, len(nums) + 1)))

# 依照每個選手的排名進行頒獎
return map(dict(zip(place, prize)).get, nums)

複雜度分析

時間複雜度: O(n log n)

n個分數進行排序,所需時間為O( n log n)。


空間複雜度: O(n)

place 排名陣列, prize獎牌陣列, 和臨時的mapping table所需空間皆為 O(n)。


關鍵知識點

題目已經保證不會有同分的情況

因此,直接對分數進行排序

冠軍拿金牌,亞軍拿銀牌,季軍拿銅牌,剩下的名次拿到對應的數字即可。


Reference

[1] Relative Ranks - LeetCode

avatar-img
90會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
題目敘述 輸入給定一個鏈結串列,整體看代表一個十進位的數字,各別看每個節點代表每個digit,分別從最高位~最低位個位數。 要求我們把原本的數字乘以二,並且以鏈結串列的形式返回答案。 原本的英文題目敘述
題目敘述 題目給定一個鏈結串列中的節點Node,要求我們從鏈結串列中刪除該節點。 題目保證該節點不是tail node。 題目要求我們in-place原位操作。 原本的英文題目敘述 測試範例 Example 1: Input: head = [4,5,1,9], node = 5
題目敘述 輸入給定一個鏈結串列的head node。 要求我們進行化簡,只要某個節點的右手邊存在比較大的節點,就刪除掉。 例如 5->2->13->3 5的右手邊有13,所以5刪除掉。 2的右手邊有13,所以2刪除掉。 13的右手邊沒有更大的節點,所以13留著。 3的右手邊沒有更大
題目敘述 給定一個非零陣列nums,請找出陣列裡面 最大的對偶數 是誰? 如果無解,請返回-1 對偶數定義: 整數k的對偶數是-k 例如: 99 和 -99互為對偶數。
題目敘述 給定一個piles陣列,裡面對應到每堆石頭的數量。 Alice 和 Bob玩輪流取石頭的遊戲,總共有n堆石頭,每堆的石頭數量有多有少。 Alice先取,接著Bob,反覆交替,每回合輪到的人可以從當下的第一堆或者最後一堆,拿走那堆對應的石頭。 最後比誰拿到的石頭總數量比較多就獲勝。
在沙龍主頁面的右上角,現在多一個放大鏡圖案的搜尋介面。 裡面可以輸入你想看的主題、關鍵字或者Leetcode題號, 就可以找到相關的文章與演算法框架分析。 例如: 搜尋 DFS 搜尋 DP 搜尋 圖論 搜尋 Coin Change ... 歡迎舊雨新知多多利用!
題目敘述 輸入給定一個鏈結串列,整體看代表一個十進位的數字,各別看每個節點代表每個digit,分別從最高位~最低位個位數。 要求我們把原本的數字乘以二,並且以鏈結串列的形式返回答案。 原本的英文題目敘述
題目敘述 題目給定一個鏈結串列中的節點Node,要求我們從鏈結串列中刪除該節點。 題目保證該節點不是tail node。 題目要求我們in-place原位操作。 原本的英文題目敘述 測試範例 Example 1: Input: head = [4,5,1,9], node = 5
題目敘述 輸入給定一個鏈結串列的head node。 要求我們進行化簡,只要某個節點的右手邊存在比較大的節點,就刪除掉。 例如 5->2->13->3 5的右手邊有13,所以5刪除掉。 2的右手邊有13,所以2刪除掉。 13的右手邊沒有更大的節點,所以13留著。 3的右手邊沒有更大
題目敘述 給定一個非零陣列nums,請找出陣列裡面 最大的對偶數 是誰? 如果無解,請返回-1 對偶數定義: 整數k的對偶數是-k 例如: 99 和 -99互為對偶數。
題目敘述 給定一個piles陣列,裡面對應到每堆石頭的數量。 Alice 和 Bob玩輪流取石頭的遊戲,總共有n堆石頭,每堆的石頭數量有多有少。 Alice先取,接著Bob,反覆交替,每回合輪到的人可以從當下的第一堆或者最後一堆,拿走那堆對應的石頭。 最後比誰拿到的石頭總數量比較多就獲勝。
在沙龍主頁面的右上角,現在多一個放大鏡圖案的搜尋介面。 裡面可以輸入你想看的主題、關鍵字或者Leetcode題號, 就可以找到相關的文章與演算法框架分析。 例如: 搜尋 DFS 搜尋 DP 搜尋 圖論 搜尋 Coin Change ... 歡迎舊雨新知多多利用!
你可能也想看
Google News 追蹤
Thumbnail
【不論競賽的輸贏結局,結束了都該好好休息。】   四年一次的奧運,頂尖運動員的最高殿堂,做為一個職業運動員誰不想挑戰自己的極限,那渴望突破的決心,是一次又一次的反覆練習與痛苦的折磨訓練才有那麼一點的機會與其他強者競爭,但能夠站上獎台上的就只有三名,而且是與全世界的好手比。     但比賽終
Thumbnail
每當看著戰神榜上的名字 一格一格往前爬時 就有股難以言喻的滿足感☺️   「升段調級」 是每場比賽後的功課📖 但老師們彼此間都有默契 會等到小朋友來棋院上課時再調整 讓他們也參與其中 獲得成就感的同時 也就更有了繼續衝刺的動力✌️   還在等什麼呢❓ 快報名參加比賽吧💪
06/19 教練藏寶圖 - 近期已出場之精彩記錄!! (20%以上的) - 3030 德律 (2/26=>6/19) 140% [本季冠軍!!] 3491 昇達科 (5/15網通=>6/19) 30% 3564 其陽 (5/9 資安=>6/19) 45% 3537 保達 (5/6
06/19 教練藏寶圖 - 近期已出場之精彩記錄!! (20%以上的) - 3030 德律 (2/26=>6/19) 140% [本季冠軍!!] 3491 昇達科 (5/15網通=>6/19) 30% 3564 其陽 (5/9 資安=>6/19) 45% 3537 保達 (5/6
Thumbnail
嗨JC! 第一名真的是很開心,對吧? 不過好像還不能鬆懈下來,畢竟也只是一次第一,還有一堆測驗項目要比,名模生死鬥可不是只有閱兵分列,我沒講錯吧?
Thumbnail
高中數學主題練習—求等比數列某項與等差級數
Thumbnail
高中數學主題練習—求等差數列某項與等差級數
Thumbnail
本文將帶你探索單淘汰、雙敗淘汰以及循環賽的場次計算,讓你成為賽事計算大師!計算比賽場次的數量,讓你不再傻眼!
Thumbnail
【不論競賽的輸贏結局,結束了都該好好休息。】   四年一次的奧運,頂尖運動員的最高殿堂,做為一個職業運動員誰不想挑戰自己的極限,那渴望突破的決心,是一次又一次的反覆練習與痛苦的折磨訓練才有那麼一點的機會與其他強者競爭,但能夠站上獎台上的就只有三名,而且是與全世界的好手比。     但比賽終
Thumbnail
每當看著戰神榜上的名字 一格一格往前爬時 就有股難以言喻的滿足感☺️   「升段調級」 是每場比賽後的功課📖 但老師們彼此間都有默契 會等到小朋友來棋院上課時再調整 讓他們也參與其中 獲得成就感的同時 也就更有了繼續衝刺的動力✌️   還在等什麼呢❓ 快報名參加比賽吧💪
06/19 教練藏寶圖 - 近期已出場之精彩記錄!! (20%以上的) - 3030 德律 (2/26=>6/19) 140% [本季冠軍!!] 3491 昇達科 (5/15網通=>6/19) 30% 3564 其陽 (5/9 資安=>6/19) 45% 3537 保達 (5/6
06/19 教練藏寶圖 - 近期已出場之精彩記錄!! (20%以上的) - 3030 德律 (2/26=>6/19) 140% [本季冠軍!!] 3491 昇達科 (5/15網通=>6/19) 30% 3564 其陽 (5/9 資安=>6/19) 45% 3537 保達 (5/6
Thumbnail
嗨JC! 第一名真的是很開心,對吧? 不過好像還不能鬆懈下來,畢竟也只是一次第一,還有一堆測驗項目要比,名模生死鬥可不是只有閱兵分列,我沒講錯吧?
Thumbnail
高中數學主題練習—求等比數列某項與等差級數
Thumbnail
高中數學主題練習—求等差數列某項與等差級數
Thumbnail
本文將帶你探索單淘汰、雙敗淘汰以及循環賽的場次計算,讓你成為賽事計算大師!計算比賽場次的數量,讓你不再傻眼!