我已經編寫了代碼來計算以下代碼中double []數組的每個元素的等級。舉個例子,如果我有double
數組{3, 1.3, 2, 3}
那麼我找到排名{2, 0, 1, 2}
。據計算爲以更好的方式在Java中找到double []數組中每個元素的等級
- 1.3最少,因此有秩0
- 2是下一個,所以它得到了以秩1
- 3是下一個大數目,所以這兩個3的get等級2 。
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,1,2,3}
,那麼該問題需要輸出{3,0,1,3}
。即它以不同的方式處理重複的元素,或者它在輸入中的重複值中斷。但是,這也是關於處理重複項,並且所需的輸出是{2,0,1,2}
。
你爲什麼要從問題中刪除代碼? – progyammer
怎麼辦?你能詳細解釋一下嗎? – Prabhu
@progy_rock,這是編輯問題格式時的拼寫錯誤。它已被糾正。 – Prabhu