java - java 求数组第二个和第三个最大元素

标签 java arrays sorting max

我必须找到第一、第二和第三大数组。我知道我可以简单地对其进行排序并返回 array[0]、array[1]、array[3]。但问题是,我需要索引,而不是值。 例如,如果我有 float[] listx={8.0, 3.0, 4.0, 5.0, 9.0} 它应该返回 4、0 和 3。

这是我的代码,但它不起作用:

//declaration max1-3        
public void maxar (float[] listx){

    float maxel1=0;
    float maxel2=0;
    float maxel3=0;

    for (int i=0; i<listx.length; i++){
        if(maxel1<listx[i])
        {maxel1=listx[i];
        max1=i;
        }
    }
    listx[max1]=0; //to exclude this one in nextsearch

    for (int j=0; j<listx.length; j++){
        if(listx[j]>maxel2)
        {maxel2=listx[j];
        max2=j;
        }
    }
    listx[max2]=0;

    for (int k=0; k<listx.length; k++){
        if(listx[k]>maxel3)
        {maxel3=listx[k];
        max3=k;
        }
    }
}

我得到了 max1,但之后所有元素都变成了 0。因此 max2 和 max3 变成了 0。请告诉我这个解决方案有什么问题。谢谢。

最佳答案

您可以使用单个循环找到这三个元素,并且不需要修改数组。

当遇到新的最大元素时,需要将之前最大的元素和之前第二大的元素向下移动一位。

同样,当找到新的第二大元素时,需要将 maxel2 转换为 maxel3

您可能希望使用一个数组,而不是使用三个变量。这将使您能够简化逻辑,并轻松推广到 k 个最大元素。

关于java - java 求数组第二个和第三个最大元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13662478/

相关文章:

java - 由用户创建新实例

python - 如何在不截断的情况下打印完整的 NumPy 数组?

Highcharts JSON 调用的 javascript 关联数组、循环和/或范围问题

sorting - 角度 Material 表排序行为导致顺序不正确

java - 使用 Rectangle.Intersects 进行碰撞检测会导致对象到表面 "stick"(Java)

java - key 斗篷 : Get notified via API when a new user registers

Php关联数组排序并获取最大长度的键

c - 在 C 中对数组进行排序时处理指针

java - 致命异常 :main error

java - 如何根据模式拆分字节数组?