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.其余分数则生成相应的名次,如第四名第五名等。