按身高排序
题目描述
给你一个字符串数组 names ,和一个由 互不相同 的正整数组成的数组 heights 。两个数组的长度均为 n 。
对于每个下标 i,names[i] 和 heights[i] 表示第 i 个人的名字和身高。
请按身高 降序 顺序返回对应的名字数组 names 。
示例
示例 1:
输入:names = [“Mary”,“John”,“Emma”], heights = [180,165,170]
输出:[“Mary”,“Emma”,“John”]
解释:Mary 最高,接着是 Emma 和 John 。
示例 2:
输入:names = [“Alice”,“Bob”,“Bob”], heights = [155,185,150]
输出:[“Bob”,“Alice”,“Bob”]
解释:第一个 Bob 最高,然后是 Alice 和第二个 Bob 。
Java代码1
class Solution {
public String[] sortPeople(String[] names, int[] heights) {
TreeMap<Integer, String> map = new TreeMap<>(Comparator.comparingInt(Integer::intValue).reversed());
for(int i = 0; i < names.length; i++) {
map.put(heights[i], names[i]);
}
return map.values().toArray(new String[names.length]);
}
}
Java代码2
class Solution {
public String[] sortPeople(String[] names, int[] heights) {
for(int i = 0; i < names.length; i++) {
for(int j = i + 1; j < names.length; j++) {
if(heights[i] < heights[j]) {
int temp = heights[i];
heights[i] = heights[j];
heights[j] = temp;
String s = new String(names[i]);
names[i] = new String(names[j]);
names[j] = new String(s);
}
}
}
return names;
}
}
Java代码3
class Solution {
public String[] sortPeople(String[] names, int[] heights) {
//创建hashmap集合,key为身高,value为姓名。
Map<Integer,String> map = new HashMap();
//创建String数组。
String[] result = new String[names.length];
//指针index。
int index = 0;
//把身高和姓名存入hashmap。
for(int i = 0; i < names.length; i++){
map.put(heights[i],names[i]);
}
//对身高进行排序
Arrays.sort(heights);
//倒序遍历,降序地根据身高从hashmap里获取姓名,并存入String数组。
for(int j = names.length-1; j>=0; j--){
result[index++] = map.get(heights[j]);
}
return result;
}
}