按身高排序
问题
给你一个字符串数组names
,和一个由互不相同
的正整数组成的数组heights
。两个数组的长度均为n
。
对于每个下标i
,names[i]
和heights[i]
表示第i
个人的名字和身高。
请按身高降序顺序返回对应的名字数组names
。
示例1:
输入:names = [“Mary”, “John”, “Emma”], heights=[180, 165, 170];
输出:[“Mary”,“Emma”, “John”]
解释:Marry最高,接着是Emma和John
示例2:
输入:names=[“Alice”, “Bob”, “Bob”],heights=[155, 185,150]
输出:[“Alice”, “Bob”, “Bob”]
解释:第一个Bob最高,然后是Alice和第三个Bob
提示:
- n == names.length == heights.length
- 1 <= n <= 10^3
- 1 <= names[i].length <= 20
- 1 <= heights[i] <= 10^5
- names[i]由大小写英文字母组成
- heights中的所有值互不相同
代码:
方法一:
将创建一个索引数组,将索引与heights数组中的元素绑定,对heights数组进行排序,用排序后的索引得到要求的数组。
代码:
public String[] sortPeople(String[] names, int[] heights) {
String[] arr = new String[names.length];
Integer[] index = new Integer[names.length];
for(int i = 0; i < names.length; i++) {
index[i] = i;
}
Arrays.sort(index, (i, j) -> heights[j] - heights[i]);
for(int i = 0; i < names.length; i++) {
arr[i] = names[index[i]];
}
return arr;
}
方法二:
思路:
将names和heights绑定为一个二元组,然后对所有二元组按照heights排序,最后的答案取出的names即为答案。
代码:
public String[] sortPeople(String[] names, int[] heights) {
String[] arr = new String[names.length];
int [][] index = new int[names.length][2];
for(int i = 0; i < names.length; i++) {
index[i] = new int[] {heights[i], i};
}
Arrays.sort(index, (a, b) -> b[0] - a[0]);
for(int i = 0; i < heights.length; i++) {
arr[i] = names[index[i][1]];
}
return arr;
}