如果有多个高值,如何从数组中找到最高值?

时间:2014-08-15 05:55:43

标签: java arrays

我有一个数组,我希望找到最高值,但这个值可能会重复

例如,考虑这个整数数组:

{10, 2, 6, 25, 40, 58, 60, 60}.
//Here the value 60 is repeated

在这里,我希望输出显示此数组中有两个最高值。与上面的示例一样,必须显示60是数组中所有值中的最高值,并且该值是数组中可用的2倍。而且我不想计算多少数字,而是想加上这两个最高数字。我有搜索程序,但我找不到任何相关的解决方案。

class Cal
{
    void CalculateThis()
    {
        int[] myArray = new int[] {20,10,5,40,20,41,41,2,6,7,3,4,5,6,23,34,7,8,9,2};
        int max = Integer.MIN_VALUE;
        int sum=0;
        for(int i = 0; i < myArray.length; i++)
        {
            if(myArray[i] > max) 
            {
                 max = myArray[i]*3;
                 sum = sum + max;
             }
        }
        System.out.println(sum);
    }

}


class program1
{
    public static void main(String args[])
    {
        Cal obj = new Cal();
        obj.CalculateThis();
    }
}

3 个答案:

答案 0 :(得分:0)

int max = ar[0];
int maxSum = 0;
for (int i=1; i< ar.length; i++)
{
    if(ar[i] > max)
       max = ar[i];
    else
       if(ar[i] == max)
          maxSum+=max;
}

答案 1 :(得分:0)

int[] myArray = { 10, 2, 6, 25, 40, 58, 60, 60 };
int max = Integer.MIN_VALUE;
int maxCount = 0;

for (int x : myArray) {
    if (x > max) {
        max = x;
        maxCount = 1;
    } else if (x == max) {
        maxCount++;
    }
}
int maxSum = max * maxCount;

System.out.println("Max value : " + max);
System.out.println("Max Count : " + maxCount);
System.out.println("Max Sum : " + maxSum);

输出:

Max value : 60
Max Count : 2
Max Sum : 120

答案 2 :(得分:0)

您可以采取各种方法:

  • 使用Arrays.sort对数组进行排序,然后从最后开始工作,直到看到不同的值...让您计算出值和计数,然后您可以将它们相乘。这是相对低效的,因为您不需要排序。
  • 编写两个方法,其中一个返回最大值,另一个返回特定值的计数。首先找到最大值,然后计算最大值,然后相乘。这需要两次通过,但在通过单独和可重复使用的操作构建最终结果方面是干净的。
  • 编写一种方法,以便同时跟踪maxsum,如果您看到更高的值,则重置两者。这可能是最有效的,但不能重复用于其他要求。 (您可以在去的时候等效地跟踪count,并在最后将max乘以count。)