力扣2418题
题目描述:
给你一个字符串数组 names ,和一个由 互不相同 的正整数组成的数组 heights 。两个数组的长度均为 n 。
对于每个下标 i,names[i] 和 heights[i] 表示第 i 个人的名字和身高。
请按身高 降序 顺序返回对应的名字数组 names 。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/sort-the-people
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解思路:可以通过一个索引数组来找heights
class Solution {
public String[] sortPeople(String[] names, int[] heights) {
String[] res = new String[names.length];//返回的结果数组
int n = names.length;
//强制使用包装类
Integer[] indice = new Integer[n];//索引数组,[0,1,2,3]
for (int i=0;i<n;i++){
indice[i]=i;
}
Arrays.sort(indice, (a, b) -> heights[b] - heights[a]);//这句比较难理解
for (int i=0;i<n;i++){
res[i] = names[indice[i]];
}
return res;
}
}
看题解中一位大佬写的:
主要理解:Arrays.sort(indice, (a, b) -> heights[b] - heights[a]);
Arrays.sort():比较器函数,确定数组中的元素应该如何比较,比较器函数是一个lambda表达式(a,b)->heights[b]->heights[a]
lambda表达式:对于给定的索引a b,将heights[b]和heights[a]进行比较,按照高度从大到小的顺序排序(heights[b]->heights[a])
如果是heights[b]->heights[a]:则是从小到大的顺序排序