LeetCode506-相對名次
阿新 • • 發佈:2018-11-16
就是一個數組裡面,有很多個不重複的數字(成績),將他們的成績對映為他們的排名。
第一名就金牌,後面的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; };
還行啊!