題目地址:
https://leetcode.com/problems/relative-ranks/
給定一個整型數組,要求返回一個字符串數組,其中是在中的排名,其中前三名要分別替換爲"Gold Medal"
,Silver Medal
和Bronze Medal
,其餘就直接返回排名。
先把拷貝一份,然後將拷貝的數組排序,並用哈希表記錄排名,接着遍歷將每個位置的排名取出即可。代碼如下:
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
public class Solution {
public String[] findRelativeRanks(int[] nums) {
int[] copy = Arrays.copyOf(nums, nums.length);
Arrays.sort(copy);
Map<Integer, Integer> map = new HashMap<>();
for (int i = copy.length - 1; i >= 0; i--) {
map.put(copy[i], copy.length - i);
}
String[] res = new String[nums.length];
for (int i = 0; i < res.length; i++) {
int rank = map.get(nums[i]);
switch (rank) {
case 1: res[i] = "Gold Medal"; break;
case 2: res[i] = "Silver Medal"; break;
case 3: res[i] = "Bronze Medal"; break;
default: res[i] = String.valueOf(rank);
}
}
return res;
}
}
時間複雜度,空間。