打印2个最大值的索引

时间:2018-07-30 21:45:56

标签: java arrays indexing max

我的问题是,如果我在数组中输入两个maxvalue数字,例如。 100、10、100。如何获取输出以打印两个索引号?

索引1和索引3的预期输出为100 索引已添加1,因为我希望索引从1开始而不是零

2 个答案:

答案 0 :(得分:1)

将此添加到初始化。

HashSet<Integer> maxIndices = new HashSet<Integer>();

第二次通过里程数组,并将{max {1}}的最大值传递给HashSet。

另一种选择是使用HashMap,其中第一个整数是里程,第二个值是找到的数量的正整数。

因为它只进行一次通过,所以即使您计算每英里里程,也可能会更快,而不仅仅是最后一次里程最大。当然,它是否取决于执行时的数据,编译器和环境条件。

对于返回值,您将需要自定义POJO Java Bean,或者可以使用Pair <>或Tuple <>。 (请参见Using Pairs or 2-tuples in Java。)

答案 1 :(得分:-1)

使用一系列 for 循环的简单Java。下面的方法将返回一个二维int数组,每行包含两列,即最高的数组值及其相应的数组索引号。

public int[][] getAllMaxValues(int[] allValues) {
    int maxVal = 0;
    int counter = 0;
    // Get the Max value in array...
    for (int i = 0; i < allValues.length; i++) {
        if (allValues[i] > maxVal) { 
            maxVal = allValues[i]; 
        }
    } 

    // How many of the same max values are there?
    for (int i = 0; i < allValues.length; i++) {
        if (allValues[i] == maxVal) {
            counter++;
        }
    }

    // Place all the max values and their respective
    // indexes into a 2D int array...
    int[][] result = new int[counter][2];
    counter = 0;
    for (int i = 0; i < allValues.length; i++) {
        if (allValues[i] == maxVal) {
            result[counter][0] = maxVal;
            result[counter][1] = i;
            counter++;
        }
    }

    // Return the 2D Array.
    return result;
}

如何使用此方法:

int[] allMiles = {100, 10, 100, 60, 20, 100, 34, 66, 74};
int[][] a = getAllMaxValues(allMiles);

for (int i = 0; i < a.length; i++) {
    System.out.println("Array max value of " + a[i][0] + 
                       " is located at index: " + a[i][1]);
}

控制台窗口将显示:

Array max value of 100 is located at index: 0
Array max value of 100 is located at index: 2
Array max value of 100 is located at index: 5