29_506. 相对名次
作者:互联网
题目描述:
解题思路:
利用二维数组:可以将分数
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 < n; 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 < n; 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<Integer,Integer> 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 < n; 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;
}
}
标签:arr,名次,String,int,clone,29,score,ans,506 来源: https://www.cnblogs.com/forrestyu/p/16178263.html