1331. Rank Transform of an Array(Solution || Leetcode easy || Java)

Palakkgoyal
2 min readNov 15, 2022

--

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

SOLUTION:

class Solution {
public int[] arrayRankTransform(int[] arr) {
//if the length of array is 0 return arr as it is
if(arr.length == 0){
return arr;
}

//Create array to store the elements of original array
int[] temp = new int[arr.length];

//add elements of original array in our new array
for(int i = 0; i < arr.length; i++){
temp[i] = arr[i];
}

//sort the temporary array
Arrays.sort(temp);

//create an array to store rank of the temporary array
int[] ranks = new int[arr.length];
ranks[0] = 1;

int r = 1;

//Assign ranks to elements
for(int i = 1; i < arr.length; i++){
if(temp[i] != temp[i-1]){
r++;
}
ranks[i] = r;
}

//We are going to search the element of original array
// into our temporary array and after finding the element
//in our temporary array we will give the rank to that element
// from our rank array
for(int i = 0; i < arr.length; i++){
int start = 0;
int end = temp.length - 1;

while(start <= end){
int mid = start + (end - start)/2;

if(temp[mid] == arr[i]){
arr[i] = ranks[mid];
break;
}
else if(temp[mid] > arr[i]){
end = mid - 1;
}
else{
start = mid + 1;
}
}
}

return arr;
}
}

Thank you for reading. If you have any queries then, please let me know in the comment section. I will surely be responsive toward it.

--

--

Palakkgoyal
Palakkgoyal

Written by Palakkgoyal

Solutions to all your coding related problems at one point. DSA question on daily basis and much more.

No responses yet