就是一个数组里面,有很多个不重复的数字(成绩),将他们的成绩映射为他们的排名。
第一名就金牌,后面的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; };
还行啊!