Я написал код для вычисления ранга каждого элемента массива double [] в следующем коде. Например, если у меня есть double
массив {3, 1.3, 2, 3}
, тогда я считаю ранг {2, 0, 1, 2}
. Она была рассчитана какНайти ранг каждого элемента массива double [] лучше в Java
- 1,3 наименее так он получил ранг 0.
- 2 является следующим, поэтому он получил ранг 1.
- 3 является следующим большим числом, так как через 3 Надевать ранг- .
public static void main() {
double[] x = {3, 1.3, 2, 3};
System.out.println(Arrays.toString(x) + " - original");
System.out.println("[2, 0, 1, 2] - should be");
System.out.println(Arrays.toString(findRank(x)) + " - our rank");
}
private static int[] findRank(double[] x){
List<Double> lst = new ArrayList<Double>();
int[] rank=new int[x.length]; // maximum length for already unique array
for(double d:x)
if (lst.indexOf(d) == -1) //only unique elements in list
lst.add(d);
Collections.sort(lst);
for(int i=0;i<x.length;i++) {
rank[i]=lst.indexOf(x[i]);
}
return rank;
}
Этот код дает следующий вывод
[3.0, 1.3, 2.0, 3.0] - original
[2, 0, 1, 2] - should be
[2, 0, 1, 2] - our rank
Меня интересует лучшая реализация вышеуказанного кода. Как это можно сделать лучше?
Редактировать
Этого вопрос просит дублирующие элементы быть ранжированы аналогичным образом и непрерывно, т.е. {0,1,2,3,...}
, не пропуская промежуточный ранг, который отличается от аналогичного, но другого вопроса How to find what is the rank of each element in an integer array. Этот вопрос требует вывода {3,0,1,3}
, если задан вход {3,1,2,3}
. то есть он обрабатывает повторяющиеся элементы по-разному или разбивает повторяющиеся значения на входе. Но это касается обработки дубликатов, и желаемый результат - {2,0,1,2}
.
Почему вы хотите удалить код из вопроса? – progyammer
Как это можно сделать? Можете ли вы объяснить подробно? – Prabhu
@progy_rock, это была опечатка при редактировании форматирования вопроса. Он был исправлен. – Prabhu