|
45 | 45 |
|
46 | 46 | <!-- 这里可写通用的实现逻辑 -->
|
47 | 47 |
|
| 48 | +**方法一:直接模拟** |
| 49 | + |
| 50 | +直接按照题意,从高到低遍历身高数组,将对应的名字加入结果数组即可。 |
| 51 | + |
| 52 | +时间复杂度 $O(n\log n)$。其中 $n$ 为数组 `heights` 的长度。 |
| 53 | + |
48 | 54 | <!-- tabs:start -->
|
49 | 55 |
|
50 | 56 | ### **Python3**
|
51 | 57 |
|
52 | 58 | <!-- 这里可写当前语言的特殊实现逻辑 -->
|
53 | 59 |
|
54 | 60 | ```python
|
55 |
| - |
| 61 | +class Solution: |
| 62 | + def sortPeople(self, names: List[str], heights: List[int]) -> List[str]: |
| 63 | + idx = list(range(len(heights))) |
| 64 | + idx.sort(key=lambda i: -heights[i]) |
| 65 | + return [names[i] for i in idx] |
56 | 66 | ```
|
57 | 67 |
|
58 | 68 | ### **Java**
|
59 | 69 |
|
60 | 70 | <!-- 这里可写当前语言的特殊实现逻辑 -->
|
61 | 71 |
|
62 | 72 | ```java
|
| 73 | +class Solution { |
| 74 | + public String[] sortPeople(String[] names, int[] heights) { |
| 75 | + int n = heights.length; |
| 76 | + int[][] arr = new int[n][2]; |
| 77 | + for (int i = 0; i < n; ++i) { |
| 78 | + arr[i] = new int[] {heights[i], i}; |
| 79 | + } |
| 80 | + Arrays.sort(arr, (a, b) -> b[0] - a[0]); |
| 81 | + String[] ans = new String[n]; |
| 82 | + for (int i = 0; i < n; ++i) { |
| 83 | + ans[i] = names[arr[i][1]]; |
| 84 | + } |
| 85 | + return ans; |
| 86 | + } |
| 87 | +} |
| 88 | +``` |
| 89 | + |
| 90 | +### **C++** |
| 91 | + |
| 92 | +```cpp |
| 93 | +class Solution { |
| 94 | +public: |
| 95 | + vector<string> sortPeople(vector<string>& names, vector<int>& heights) { |
| 96 | + int n = heights.size(); |
| 97 | + vector<pair<int, int>> arr(n); |
| 98 | + for (int i = 0; i < n; ++i) { |
| 99 | + arr[i] = {-heights[i], i}; |
| 100 | + } |
| 101 | + sort(arr.begin(), arr.end()); |
| 102 | + vector<string> ans(n); |
| 103 | + for (int i = 0; i < n; ++i) { |
| 104 | + ans[i] = names[arr[i].second]; |
| 105 | + } |
| 106 | + return ans; |
| 107 | + } |
| 108 | +}; |
| 109 | +``` |
63 | 110 |
|
| 111 | +### **Go** |
| 112 | +
|
| 113 | +```go |
| 114 | +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} |
| 120 | + } |
| 121 | + sort.Slice(arr, func(i, j int) bool { return arr[i].v > arr[j].v }) |
| 122 | + ans := make([]string, n) |
| 123 | + for i, v := range arr { |
| 124 | + ans[i] = names[v.i] |
| 125 | + } |
| 126 | + return ans |
| 127 | +} |
64 | 128 | ```
|
65 | 129 |
|
66 | 130 | ### **TypeScript**
|
|
0 commit comments