LeetCode - 506 - 相对名次 - java

x33g5p2x  于2021-12-12 转载在 Java  
字(1.4k)|赞(0)|评价(0)|浏览(357)

题目条件

做法

先获得运动员人数

将金银铜三奖牌,放在一起做一个数组

使用二维数组 来 存储运动员得分情况 和 给运动员编号。(重点)

对二维数组进行排序(降序:按得分从高到低排序)

发奖牌 (重点)

代码如下

  1. class Solution {
  2. public String[] findRelativeRanks(int[] score) {
  3. int n = score.length;
  4. String[] str1 = {"Gold Medal","Silver Medal","Bronze Medal"};
  5. int[][] arr = new int[n][2];// n行 2列 的二维数组
  6. for(int i = 0;i < n;i++){
  7. arr[i][0] = score[i];//将运动员得分存入二维数组每一行一维数组的0下标位置
  8. arr[i][1] = i;// //将运动员编号存入二维数组每一行一维数组的1下标位置
  9. }
  10. Arrays.sort(arr,(a,b)->b[0]-a[0]);
  11. String[] str2 = new String[n];// 记录 每个运动的名次
  12. for(int i = 0;i < n;i++ ){
  13. if(i<3){// 由于 arr 是 降序,所以前面三名运动员,是 第 1 ~ 第3名
  14. str2[arr[i][1]] = str1[i];
  15. }else{
  16. str2[arr[i][1]] = Integer.toString(i+1);
  17. }
  18. }
  19. return str2;
  20. }
  21. }

另外 附加 一个程序 我自己 加了个 循环输入

  1. import java.util.*;
  2. class Solution {
  3. public String[] findRelativeRanks(int[] score) {
  4. int n = score.length;
  5. String[] str1 = {"Gold Medal","Silver Medal","Bronze Medal"};
  6. int[][] arr = new int[n][2];
  7. for (int i = 0; i < n; i++) {
  8. arr[i][0] = score[i];
  9. arr[i][1] = i;
  10. }
  11. Arrays.sort(arr,(a,b)->b[0] - a[0]);
  12. String[] str2 = new String[n];
  13. for (int i = 0; i < n; i++) {
  14. if(i<3){
  15. str2[arr[i][1]] = str1[i];
  16. }else{
  17. str2[arr[i][1]] = Integer.toString(i+1);
  18. }
  19. }
  20. return str2;
  21. }
  22. }
  23. public class Manuscript{
  24. public static void main(String[] args) {
  25. Scanner sc = new Scanner(System.in);
  26. int[] score = new int[sc.nextInt()];
  27. int n = score.length;
  28. int i = 0;
  29. while(n--!=0 && sc.hasNextInt()){
  30. score[i++] = sc.nextInt();
  31. }
  32. Solution solution = new Solution();
  33. String[] str = solution.findRelativeRanks(score);
  34. System.out.println(Arrays.toString(str));
  35. sc.close();
  36. }
  37. }

相关文章