leetcode2418按身高排序
给你一个字符串数组 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 。
class Solution {
public String[] sortPeople(String[] names, int[] heights) {
HashMap<Integer,String> map = new HashMap<>();
for (int i = 0; i < names.length; i++) {
map.put(heights[i],names[i]);
}
this.quickSort(0,heights.length-1,heights);
String[] arr = new String[names.length];
for (int i = 0; i < arr.length; i++) {
arr[i] = map.get(heights[i]);
}
return arr;
}
/**
* 降序快排
* @param start
* @param end
* @param arr
*/
public void quickSort(int start,int end,int[] arr){
if(start >= end){
return;
}
int mid = arr[start];
int istart = start;
int iend = end;
while (true) {
//找一个大于mid的值
while(arr[end] < mid && start < end){
end--;
}
if(start >= end){
break;
}
arr[start] = arr[end];
while(arr[start] > mid && start < end){
start++;
}
if(start >= end){
break;
}
arr[end] = arr[start];
}
arr[start] = mid;
quickSort(istart,start-1,arr);
quickSort(start+1,iend,arr);
}
}
map + 快排