一法(效率较低):
1.备份原数组,将原数组排序
2.遍历排序后的数组,用indexOf从大到小找出元素在原数组中的索引
3.判断索引值在result中加入对应答案
二法(效率较高):
1.备份原数组,将原数组排序
2.遍历排序后的数组,用index判断位置并在哈希表中设置对应键值
3.遍历原数组,用原数组对应哈希表取出值加入到result中
二法由于使用了哈希表替代了indexOf,所以避免了时间复杂度O(n2)的情况,时间复杂度低了一个层次
var findRelativeRanks = function(score) {
//一法
// let oldScore=[...score]
// score.sort((a,b)=>b-a)
// let result=[]
// for(let i=0;i<score.length;i++){
// let index=oldScore.indexOf(score[i])
// i===0?result[index]='Gold Medal':''
// i===1?result[index]='Silver Medal':''
// i===2?result[index]='Bronze Medal':''
// if(i===0 || i===1 || i===2){
// continue
// }
// result[index]=String(i+1)
// }
// return result
//二法
let result=[]
let oldScore=[...score]
let rankingMap=new Map()
score.sort((a,b)=>b-a)
let rank=(index)=>{
if(index===0){
return 'Gold Medal'
}else if(index===1){
return 'Silver Medal'
}else if(index===2){
return 'Bronze Medal'
}else{
return String(index+1)
}
}
score.map((item,index)=>{
rankingMap.set(item,rank(index))
})
oldScore.map((item,index)=>{
result.push(rankingMap.get(item))
})
return result
};
一法:时间复杂度O(n2),空间复杂度O(1)
二法:时间复杂度O(n),空间复杂度O(1)