# 1331. Rank Transform of an Array

Given an array of integers `arr`, replace each element with its rank.

The rank represents how large the element is. The rank has the following rules:

• Rank is an integer starting from 1.
• The larger the element, the larger the rank. If two elements are equal, their rank must be the same.
• Rank should be as small as possible.

Example 1:

Input: arr = [40,10,20,30]
Output: [4,1,2,3]
Explanation : 40 is the largest element. 10 is the smallest. 20 is the second smallest. 30 is the third smallest.

Example 2:

Input: arr = [100,100,100]
Output: [1,1,1]
Explanation : Same elements share the same rank.

Example 3:

Input: arr = [37,12,28,9,100,56,80,5,12]
Output: [5,3,4,2,8,6,7,1,3]

Constraints:

• `0 <= arr.length <= 105`
• `-109 <= arr[i] <= 109`

``````class Solution {
public:
vector<int> arrayRankTransform(vector<int>& arr) {
int rank = 1;
unordered_map<int, int> rankMap;
vector<int> nums = arr;
sort(nums.begin(), nums.end());
for (int num : nums) {
if (rankMap.count(num)) continue;
rankMap[num] = rank++;
}
for (int &num : arr) {
num = rankMap[num];
}
return arr;
}
};
``````

Github 同步地址:

https://github.com/grandyang/leetcode/issues/1331

Rank Transform of a Matrix

Find Target Indices After Sorting Array

https://leetcode.com/problems/rank-transform-of-an-array/

https://leetcode.com/problems/rank-transform-of-an-array/solutions/489753/java-c-python-hashmap/

LeetCode All in One 题目讲解汇总(持续更新中…)

（欢迎加入博主的知识星球，博主将及时答疑解惑，并分享刷题经验与总结，快快加入吧～）

|

Venmo 打赏

—|—

 微信打赏 Venmo 打赏
（欢迎加入博主的知识星球，博主将及时答疑解惑，并分享刷题经验与总结，试运营期间前五十位可享受半价优惠～）

×

Help us with donation