1331. Rank Transform of an Array

解题思路:本题求一个数组中各个元素的排序作,主要分为以下几步:

  • 开辟另外一块内存对原数组排序,原数组在这一步保持不变
  • 对排序好的数组依次遍历放入一个 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;
    }
};

Published by Dongwei

stay hungry, stay foolish

Leave a comment