2017-11-26 5 views
1

で上から3番号を見つけると:私はこの配列に同じ値よりも考慮する

value:15 - index: 1 
value:15 - index: 1 
value:9 - index: 2 
value:9 - index: 2 
value:9 - index: 2 
value:12 - index: 3 

:私は、例えば同じ値で予想を上から3の数を取得しようとしている

int[] value = {15, 15, 9, 9, 9, 12, 8, 8, 4}; 

コードの下にこれを書いて、それは配列の中で最大の値で並べ替えることができますが、私は3つのレベルについて知っているようにインデックスを追加することはできません。例えば:

int[]     value = {15, 15, 9, 9, 9, 12, 8, 8, 4}; 
Map<Integer, Integer> map = new HashMap<>(); 
for (int k = 0; k < value.length; k++) 
    map.put(k, value[k]); 
List<Map.Entry<Integer, Integer>> list = 
     new LinkedList<>(map.entrySet()); 
Collections.sort(list, (e1, e2) -> e2.getValue().compareTo(e1.getValue())); 
for (Map.Entry<Integer, Integer> large : list) 
    Log.e("value = ", large.getValue() + " , Index = " + large.getKey()); 

出力は次のようになります。

value =: 15 , Index = 0 
value =: 15 , Index = 1 
value =: 12 , Index = 5 
value =: 9 , Index = 3 
value =: 9 , Index = 4 
value =: 9 , Index = 2 
value =: 8 , Index = 7 
value =: 8 , Index = 6 
value =: 4 , Index = 8 

どのように私はこの問題、正しいインデックスを解決することができますか?事前に感謝します

+0

を与える - あなたは、配列の最初の3つのユニークな番号をしたいですか、またはあなたがそれらをソートし、3つの最小の一意の値を見つけたいですか? – Prisoner

+0

は、この配列では '9 'のような同じ値を持っている可能性があるので、一意ではないかもしれません。' value:15 - index:1 value: 15 - index:1 値:9 - インデックス:2 値:9 - インデックス:2 値:9 - インデックス:2 値:12 - インデックス:3'、 @Prisoner –

+0

あなたの例では、最大のものから最小のものまで順番に表示されていません。それは、入力配列内にある順序で表示します。 – Prisoner

答えて

3

あなたの例を考えれば、あなたは並べ替えをするつもりはありません。

int[] value = {15, 15, 9, 9, 9, 12, 8, 8, 4}; 

int index = 1; 
int lastValue = value[0]; 
for(int co=0; co<value.length; co++){ 
    int thisValue = value[co]; 
    if(thisValue != lastValue){ 
     index++; 
     lastValue = thisValue; 
    } 
    System.out.println("Value =: "+thisValue+" , Index = "+index); 
} 

を明確にするために所望の出力

Value =: 15 , Index = 1 
Value =: 15 , Index = 1 
Value =: 9 , Index = 2 
Value =: 9 , Index = 2 
Value =: 9 , Index = 2 
Value =: 12 , Index = 3 
Value =: 8 , Index = 4 
Value =: 8 , Index = 4 
Value =: 4 , Index = 5 
+0

ありがとうございました。私の問題は解決しました –

関連する問題