思路:
- 找到数组中的最小值min,最大值max;
- 申请一个数组count其大小为[max-min+1],该数组用来对题目中的数组进行排序,其中存储的内容是题目所给数组中元素的顺序;
- count数组的构造方法是:从第一位开始每一位中存储自己的顺序,所以其后面一位元素就可以根据前一位的顺序来得到自己的顺序。
- 将count中的内容转移到结果数组res中
class Solution {
public int[] arrayRankTransform(int[] arr) {
int min = Integer.MAX_VALUE, max = Integer.MIN_VALUE;
for(int num : arr){ //找最大最小值
if(num < min) min = num;
if(num > max) max = num;
}
int[] count = new int[max-min+1]; //最多存在 max-min+1 个不同元素
for(int num : arr) count[num-min] = 1; //初次遍历,找到存在的元素
for(int i = 1; i < count.length; i++){ //二次遍历,对存在的元素进行排序
count[i] = count[i-1] + count[i];
}
int[] res = new int[arr.length];
for(int i = 0; i < arr.length; i++){
res[i] = count[arr[i]-min]; //count数组存放着对应的排序后索引
}
return res;
}
}