Thu. Nov 21st, 2024

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.
class Solution {
    public int[] arrayRankTransform(int[] arr) {
        int[] temp = Arrays.copyOf(arr, arr.length);
        Arrays.sort(temp);
        Map<Integer,Integer> rankMap = new HashMap<Integer,Integer>();
        int rank = 1;
        for(int i:temp){
            if(!rankMap.containsKey(i)) rankMap.put(i,rank++);
        }
        int[] result = new int[arr.length];
        for(int i=0;i<arr.length;i++){
            result[i] = rankMap.get(arr[i]);
        }
        return result;
    }
}