解题思路:本题求一个数组中各个元素的排序作,主要分为以下几步:
- 开辟另外一块内存对原数组排序,原数组在这一步保持不变
- 对排序好的数组依次遍历放入一个 unordered_map 中
- 遍历原数组,按值将索引作为值一次更新,然后返回
时间复杂度:O(nlogn) / 空间复杂度:O(n)
class Solution {
public:
vector<int> arrayRankTransform(vector<int>& arr) {
vector<int> A(arr);
sort(A.begin(), A.end());
unordered_map<int, int> rank;
for(auto a : A){
rank.emplace(a, rank.size() + 1);
}
for(auto& a : arr){
a = rank[a];
}
return arr;
}
};