45
45
46
46
<!-- 这里可写通用的实现逻辑 -->
47
47
48
- ** 方法一:直接模拟 **
48
+ ** 方法一:排序 **
49
49
50
- 直接按照题意,从高到低遍历身高数组,将对应的名字加入结果数组即可 。
50
+ 根据题目描述,我们可以创建一个长度为 $n$ 的下标数组 $idx,ドル其中 $idx [ i ] =i$。然后我们对 $idx$ 中的每个下标按照 $heights$ 中对应的身高降序排序,最后遍历排序后的 $idx$ 中的每个下标 $i,ドル将 $names [ i ] $ 加入答案数组即可 。
51
51
52
- 时间复杂度 $O(n\log n)$。其中 $n$ 为数组 ` heights ` 的长度。
52
+ 我们也可以创建一个长度为 $n$ 的数组 $arr,ドル数组中每个元素是一个二元组 $(heights[ i] , i),ドル然后我们对 $arr$ 按照身高降序排序。最后遍历排序后的 $arr$ 中的每个元素 $(heights[ i] , i),ドル将 $names[ i] $ 加入答案数组即可。
53
+
54
+ 时间复杂度 $O(n \times \log n),ドル空间复杂度 $O(n)$。其中 $n$ 是数组 $names$ 和 $heights$ 的长度。
53
55
54
56
<!-- tabs:start -->
55
57
@@ -65,14 +67,38 @@ class Solution:
65
67
return [names[i] for i in idx]
66
68
```
67
69
70
+ ``` python
71
+ class Solution :
72
+ def sortPeople (self , names : List[str ], heights : List[int ]) -> List[str ]:
73
+ return [name for _, name in sorted (zip (heights, names), reverse = True )]
74
+ ```
75
+
68
76
### ** Java**
69
77
70
78
<!-- 这里可写当前语言的特殊实现逻辑 -->
71
79
72
80
``` java
73
81
class Solution {
74
82
public String [] sortPeople (String [] names , int [] heights ) {
75
- int n = heights. length;
83
+ int n = names. length;
84
+ Integer [] idx = new Integer [n];
85
+ for (int i = 0 ; i < n; ++ i) {
86
+ idx[i] = i;
87
+ }
88
+ Arrays . sort(idx, (i, j) - > heights[j] - heights[i]);
89
+ String [] ans = new String [n];
90
+ for (int i = 0 ; i < n; ++ i) {
91
+ ans[i] = names[idx[i]];
92
+ }
93
+ return ans;
94
+ }
95
+ }
96
+ ```
97
+
98
+ ``` java
99
+ class Solution {
100
+ public String [] sortPeople (String [] names , int [] heights ) {
101
+ int n = names. length;
76
102
int [][] arr = new int [n][2 ];
77
103
for (int i = 0 ; i < n; ++ i) {
78
104
arr[i] = new int [] {heights[i], i};
@@ -93,15 +119,32 @@ class Solution {
93
119
class Solution {
94
120
public:
95
121
vector<string > sortPeople(vector<string >& names, vector<int >& heights) {
96
- int n = heights.size();
97
- vector<pair<int, int>> arr(n);
122
+ int n = names.size();
123
+ vector<int > idx(n);
124
+ iota(idx.begin(), idx.end(), 0);
125
+ sort(idx.begin(), idx.end(), [ &] (int i, int j) { return heights[ j] < heights[ i] ; });
126
+ vector<string > ans;
127
+ for (int i : idx) {
128
+ ans.push_back(names[ i] );
129
+ }
130
+ return ans;
131
+ }
132
+ };
133
+ ```
134
+
135
+ ```cpp
136
+ class Solution {
137
+ public:
138
+ vector<string> sortPeople(vector<string>& names, vector<int>& heights) {
139
+ int n = names.size();
140
+ vector<pair<int, int>> arr;
98
141
for (int i = 0; i < n; ++i) {
99
- arr[ i ] = { -heights[ i] , i} ;
142
+ arr.emplace_back( -heights[i], i) ;
100
143
}
101
144
sort(arr.begin(), arr.end());
102
- vector<string > ans(n) ;
145
+ vector<string> ans;
103
146
for (int i = 0; i < n; ++i) {
104
- ans[ i ] = names[ arr[ i] .second] ;
147
+ ans.emplace_back( names[arr[i].second]) ;
105
148
}
106
149
return ans;
107
150
}
@@ -110,25 +153,55 @@ public:
110
153
111
154
### ** Go**
112
155
156
+ ``` go
157
+ func sortPeople (names []string , heights []int ) (ans []string ) {
158
+ n := len (names)
159
+ idx := make ([]int , n)
160
+ for i := range idx {
161
+ idx[i] = i
162
+ }
163
+ sort.Slice (idx, func (i, j int ) bool { return heights[idx[j]] < heights[idx[i]] })
164
+ for _ , i := range idx {
165
+ ans = append (ans, names[i])
166
+ }
167
+ return
168
+ }
169
+ ```
170
+
113
171
``` go
114
172
func sortPeople (names []string , heights []int ) []string {
115
- n := len(heights)
116
- type pair struct{ v, i int }
117
- arr := make([]pair, n)
118
- for i, v := range heights {
119
- arr[i] = pair{v, i}
173
+ n := len (names)
174
+ arr := make ([][2 ]int , n)
175
+ for i , h := range heights {
176
+ arr[i] = [2 ]int {h, i}
120
177
}
121
- sort.Slice(arr, func(i, j int) bool { return arr[i].v > arr[j].v })
178
+ sort.Slice (arr, func (i, j int ) bool { return arr[i][ 0 ] > arr[j][ 0 ] })
122
179
ans := make ([]string , n)
123
- for i, v := range arr {
124
- ans[i] = names[v.i ]
180
+ for i , x := range arr {
181
+ ans[i] = names[x[ 1 ] ]
125
182
}
126
183
return ans
127
184
}
128
185
```
129
186
130
187
### ** TypeScript**
131
188
189
+ ``` ts
190
+ function sortPeople(names : string [], heights : number []): string [] {
191
+ const n = names .length ;
192
+ const idx = new Array (n );
193
+ for (let i = 0 ; i < n ; ++ i ) {
194
+ idx [i ] = i ;
195
+ }
196
+ idx .sort ((i , j ) => heights [j ] - heights [i ]);
197
+ const ans: string [] = [];
198
+ for (const i of idx ) {
199
+ ans .push (names [i ]);
200
+ }
201
+ return ans ;
202
+ }
203
+ ```
204
+
132
205
``` ts
133
206
function sortPeople(names : string [], heights : number []): string [] {
134
207
return names
0 commit comments