LeetCode - 简单 - 相对名次
image.png

  1. /**
  2. * @param {number[]} score
  3. * @return {string[]}
  4. */
  5. var findRelativeRanks = function(score) {
  6. const length = score.length;
  7. //排除特殊情况,即score的长度不满足3的情况
  8. if (length===1) {
  9. return ["Gold Medal"];
  10. }
  11. if (length===2) {
  12. if (score[0]>score[1]) {
  13. return ["Gold Medal", "Silver Medal"];
  14. } else {
  15. return ["Silver Medal", "Gold Medal"];
  16. }
  17. }
  18. //因为sort会改变原数组,所以这里需要对原数组score进行深拷贝
  19. const l = JSON.parse(JSON.stringify(score)).sort((prev, next) => {
  20. return prev - next;
  21. }).reverse();
  22. //记录金银铜三牌的分数
  23. const gold = l[0];//金牌的分数,下面以此类推
  24. const silver = l[1];
  25. const bronze = l[2]
  26. for (let i=0;i<length;i++) {
  27. if (score[i] === gold) {
  28. score[i] = 'Gold Medal';
  29. } else if (score[i] === silver) {
  30. score[i] = 'Silver Medal';
  31. } else if (score[i]===bronze) {
  32. score[i] = 'Bronze Medal';
  33. } else {
  34. score[i] = (l.indexOf(score[i])+1).toString();
  35. }
  36. }
  37. return score;
  38. };

思路

  1. 首先排除score.length<3的情况,我选择枚举来快速返回结果;
  2. 接下来处理score.length>=3的情况,这里对原数组进行深拷贝操作避免sort函数改变原数组,接下来记录下金银铜三张奖牌的数据方便在score中比对;
  3. 根据题干,score是没有重复数据的数组,所以可以直接遍历score,然后逐一与2中的三组数据进行比对并修改相应的数据:1.第一名金牌,第二名银牌,第三名铜牌;2.其余分数则生成相应的名次,如第四名第五名等。