1. 程式人生 > >LeetCode506-相對名次

LeetCode506-相對名次

就是一個數組裡面,有很多個不重複的數字(成績),將他們的成績對映為他們的排名。

第一名就金牌,後面的4、5、6名這些就輸出相對的排名就好了。

有個問題,數字不是連續的。

其實一開始也沒想到什麼好的方法

怎樣才能做到,知道每個數字的名次,又不搞亂順序呢?因為結果是要返回一個和成績對應名次的陣列。

1、建立一個副本來儲存這些成績。

2、排序

3、用一個map來儲存,成績和對應的名次

4、最後遍歷成績陣列,找到當前成績對應的名次,push到結果數組裡面即可。

 

/**
 * @param {number[]} nums
 * @return {string[]}
 
*/ var findRelativeRanks = function(nums) { var temp = []; // 副本,用於排序 for(let item of nums){ temp.push(item); } // 預設是升序的,這裡需要降序 temp.sort((x,y)=>(y - x)); var map = new Map(); // 儲存成績和對應排名 for(let index = 0;index<temp.length;index++){ map.set(temp[index],index); }
var result = []; for(let item of nums){ // 去map裡面看排名 let range = map.get(item); if(range==0){ result.push("Gold Medal"); }else if(range==1){ result.push("Silver Medal"); }else if(range==2){ result.push("Bronze Medal"); }
else{ result.push((range+1).toString()) } } return result; };

還行啊!