Java:数组中出现最大值的次数

时间:2018-06-19 06:25:37

标签: java arrays sorting

此代码仅显示最大发生值而非最大值且发生最大值。

System.out.println(countMax(new int[] {6,3,1,3,4,3,6,5}));

static int countMax(int[]a) {
    int count = 1, tempCount;
    int maxCount = a[0];
    int temp = 0;

    for(int i =0; i < a.length - 1; i++) {

        temp = a[i];
        tempCount = 0;

        for(int j = 1; j < a.length; j++) {

            if(temp == a[j])
                tempCount++;
        }

        if(tempCount > count)

            maxCount = temp;
        count = tempCount;
    }

    return maxCount;
}

5 个答案:

答案 0 :(得分:4)

您必须保留一个额外的变量,其中包含当前最大值的计数。你不需要两个循环,只需要一个:

static int countMax(int[] a) {
    int max = Integer.MIN_VALUE;
    int count = 0;
    for (int curr : a) {
        if (curr > max) {
            max = curr;
            count = 1;
        } else if (curr == max) {
            ++count;
        }
    }

    return count;
}

或者,Java 8的流提供了一种非常简单的方法,尽管不是太高效的方式来为您完成所有繁重的工作:

static int countMax(int[] a) {
    return Arrays.stream(a)
                 .boxed()
                 .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
                 .entrySet()
                 .stream()
                 .max(Map.Entry.comparingByKey())
                 .map(Map.Entry::getValue)
                 .orElse(0L)
                 .intValue();
}

答案 1 :(得分:1)

在这种情况下,您只存储并返回最大发生次数的计数。尝试存储号码。

答案 2 :(得分:1)

这是实现这一目标的一种方法。也许不是最好的。

  

步骤1: - 按升序对数组进行排序。

     

第2步:从数组末尾开始计算相等元素的数量。

myFunc(this);

答案 3 :(得分:0)

您应该采取两步解决方案:

  1. 查找数组中的最大值
  2. 计算,此最大值出现的频率
  3. 因此,您必须迭代数组两次 - 一次找到最大值,一次计算它。

    如果您仍有问题,请参阅以下代码段:

    public static int countMax(int[] values) {
        // first, find the maximum value
        int maxValue = Integer.MIN_VALUE;
        for (int i = 0; i < values.length; ++i) {
            maxValue = Math.max(maxValue, values[i]);
        }
    
        // then count the maximum value
        int maxCount = 0;
        for (int i = 0; i < values.length; ++i) {
            if (values[i] == maxValue) maxCount++;
        }
    
        return maxCount;
    }
    

答案 4 :(得分:-1)

蛮力:

创建地图

现在迭代数组 - 对于数组中的每个项目,检查它是否已经在Map中(作为键)。

如果是,请获取值,将其递增1,然后将其放回Map中。

如果它已经不在Map中,请将其放入初始值为1。