1331. Rank Transform of an Array(Solution || Leetcode easy || Java)
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.