题目地址:
https://leetcode.com/problems/sort-the-people/description/
给定两个长 n n n数组,第一个数组是 n n n个人的名字,第二个数组是 n n n个人的身高。要求将名字按身高从高到低排序,返回新数组。题目保证身高各不相同。
本质上是对 [ 0 , 1 , . . . , n − 1 ] [0,1,...,n-1] [0,1,...,n−1]这 n n n个下标按身高排序,排好序之后将名字按新顺序加入答案即可。代码如下:
class Solution {
public:
vector<string> sortPeople(vector<string>& names, vector<int>& heights) {
int n = names.size();
vector<int> v;
for (int i = 0; i < n; i++) v.push_back(i);
sort(v.begin(), v.end(),
[&](int i, int j) { return heights[i] > heights[j]; });
vector<string> res;
for (int i = 0; i < n; i++) res.push_back(names[v[i]]);
return res;
}
};
时间复杂度 O ( n log n ) O(n\log n) O(nlogn),空间 O ( n ) O(n) O(n)。