【LeetCode】第31天 - 506. 相对名次

x33g5p2x  于2021-12-06 转载在 其他  
字(0.7k)|赞(0)|评价(0)|浏览(220)

题目描述

解题思路

  • 首先使用一个哈希表,哈希表的key,value分别存放第i位运动员的得分和 i;
  • 然后复制score并排序;
  • 根据得分查到该运动员在score中的位置,并在该位置赋值该运动员的名次。
    (结合代码分析)

代码实现

  1. class Solution {
  2. public String[] findRelativeRanks(int[] score) {
  3. int n = score.length;
  4. String[] topThree = {"Gold Medal", "Silver Medal", "Bronze Medal"}; // 前三名
  5. String[] res = new String[n]; // 保存结果
  6. int[] clone = score.clone(); //复制socre
  7. Arrays.sort(clone); //对得分进行排序
  8. Map<Integer,Integer> map = new HashMap<>();
  9. for(int i=0;i<n;i++){
  10. map.put(score[i],i); //哈希表的key,value分别存放第i位运动员的得分和i
  11. }
  12. for(int i=0;i<n;i++){
  13. if(i<3){
  14. //n-i-1:clone排序后是递增的,所以我们从后往前
  15. //根据得分查到该运动员在score中的位置,并在该位置赋值该运动员的名次
  16. res[map.get(clone[n-i-1])] = topThree[i]; //前三名赋值金银铜牌
  17. }else{
  18. res[map.get(clone[n-i-1])] = Integer.toString(i + 1); //第4 名及以后赋值名次
  19. }
  20. }
  21. return res;
  22. }
  23. }

相关文章