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;
}
}
滴水穿石、燕子衔泥,点点滴滴都是添补
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~