从顶部找到3个数字并考虑相同的值

时间:2017-11-26 12:59:23

标签: java android

在这个数组中:

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

我试图以相同的值从预期的顶部得到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

我在下面编写了这段代码,并且可以在数组中使用最大值对它们进行排序,但我无法将索引添加为三级知道。例如:

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

如何解决此问题并更正索引?提前致谢

1 个答案:

答案 0 :(得分: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