LeetCode - 简单 - 相对名次
/**
* @param {number[]} score
* @return {string[]}
*/
var findRelativeRanks = function(score) {
const length = score.length;
//排除特殊情况,即score的长度不满足3的情况
if (length===1) {
return ["Gold Medal"];
}
if (length===2) {
if (score[0]>score[1]) {
return ["Gold Medal", "Silver Medal"];
} else {
return ["Silver Medal", "Gold Medal"];
}
}
//因为sort会改变原数组,所以这里需要对原数组score进行深拷贝
const l = JSON.parse(JSON.stringify(score)).sort((prev, next) => {
return prev - next;
}).reverse();
//记录金银铜三牌的分数
const gold = l[0];//金牌的分数,下面以此类推
const silver = l[1];
const bronze = l[2]
for (let i=0;i<length;i++) {
if (score[i] === gold) {
score[i] = 'Gold Medal';
} else if (score[i] === silver) {
score[i] = 'Silver Medal';
} else if (score[i]===bronze) {
score[i] = 'Bronze Medal';
} else {
score[i] = (l.indexOf(score[i])+1).toString();
}
}
return score;
};
思路
- 首先排除score.length<3的情况,我选择枚举来快速返回结果;
- 接下来处理score.length>=3的情况,这里对原数组进行深拷贝操作避免sort函数改变原数组,接下来记录下金银铜三张奖牌的数据方便在score中比对;
- 根据题干,score是没有重复数据的数组,所以可以直接遍历score,然后逐一与2中的三组数据进行比对并修改相应的数据:1.第一名金牌,第二名银牌,第三名铜牌;2.其余分数则生成相应的名次,如第四名第五名等。