作者:cssic_630 | 来源:互联网 | 2023-09-24 15:25
题目描述:解题思路:利用二维数组:可以将分数score和运动员编号i放到一个n行2列的二维数组中,至于为什么是n行2列而不是2行n列,是因为在利用java的sort排序时,可以按照
题目描述:
解题思路:
利用二维数组:可以将分数score
和运动员编号i
放到一个n行2列的二维数组中,至于为什么是n行2列而不是2行n列,是因为在利用java的sort排序时,可以按照第几列来进行排序,不会改变每一行元素的相对顺序,然后对score这一列进行排序。
利用hash表:可以将score
复制到数组clone
中去,然后将clone和名次序号
一一对应放入到hash表中,再根据运动员编号i的score
从hash表中查找到其对应名次即可。
代码:
利用二维数组
//利用二维数组
class Solution {
public String[] findRelativeRanks(int[] score) {
String[] ranks = {"Gold Medal","Silver Medal","Bronze Medal"};
int n = score.length;
int[][] arr = new int[n][2];
for (int i = 0; i arr[i][0] = score[i];
arr[i][1] = i;
}
Arrays.sort(arr, (a,b)->(b[0] - a[0]));
String[] ans = new String[n];
for (int i = 0; i if (i <3) {
ans[arr[i][1]] = ranks[i];
}else {
ans[arr[i][1]] = Integer.toString(i + 1);
}
}
return ans;
}
}
利用hash表
//利用hash表
class Solution {
public String[] findRelativeRanks(int[] score) {
String[] ranks = {"Gold Medal","Silver Medal","Bronze Medal"};
HashMap map = new HashMap<>();
int n = score.length;
String[] ans = new String[n];
int[] clOne= score.clone();
Arrays.sort(clone);
for (int i = n - 1; i >= 0; i--) {
map.put(clone[i], n - i - 1);
}
for (int i = 0; i if (map.get(score[i]) <3) {
ans[i] = ranks[map.get(score[i])];
}else {
ans[i] = Integer.toString(map.get(score[i]) + 1);
}
}
return ans;
}
}