1331. Rank Transform of an Array

Easy
​
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

解題

Runtime: 73 ms, faster than 90.48%
Memory Usage: 13.2 MB, less than 21.43%
func arrayRankTransform(arr []int) []int {
tmp := append([]int{}, arr...)
sort.Ints(tmp)
rank := 0
m := make(map[int]int)
for _, val := range tmp {
if _, ok := m[val]; !ok {
rank++
}
m[val] = rank
}
ans := make([]int, 0)
for _, val := range arr {
ans = append(ans, m[val])
}
return ans
}