如何从整数数组中找出出现的频率(大数)

时间:2017-10-11 23:40:02

标签: java

我想找到大值出现的频率,就像在数组最大值为98时,我想找到它重复的次数。帮帮我们

public static void main(String[] args) {
    int numbers[] = new int[]{32,43,53,25,98,54,32,65,63,98,43,23,25,98};
    int largest = numbers[0];
    for (int i=1; i< numbers.length; i++) {
        if(numbers[i] > largest)
            largest = numbers[i];
    }
    System.out.println("Largest Number is : " + largest);
}

4 个答案:

答案 0 :(得分:2)

不确定这是否是一个家庭作业问题,所以我会尝试通过伪代码而非Java来为您提供帮助。

假设您正在查看元素。有三种情况:

  1. 它比之前的最大值小。忽略它。
  2. 它比之前的最大值(或者它是第一个项目)大。让它成为新的最大值。截至目前,其数量必须为1.
  3. 它等于之前的最大值。将最大数量增加1。

答案 1 :(得分:1)

您需要添加count变量。每当找到新的最大值时,将此变量重置为1,并且只要当前索引处的值等于您到目前为止找到的最大数字,就将其递增。

答案 2 :(得分:0)

解决此类问题的传统方法是使用哈希表。第一次看到一个元素时,将它放入hash = 1的哈希表中。每次在此之后看到相同的元素时,将其计数增加1.最后,循环遍历哈希表的键并找到最大的键,然后输出该键及其相关值(即其计数)。

在某种意义上,可能存在更高效的解决方案,但我猜他们也更复杂。你可以说你是否需要考虑这一点。

答案 3 :(得分:0)

使用每次看到最大值时递增的计数器,并在每次找到新的较大值时重置:

int largest = numbers[0];
int counter = 1;

for(int i=1; i< numbers.length; i++)
{
        if(numbers[i] > largest) {
                largest = numbers[i];
                counter = 1;
        } elseif (numbers[i] == largest) {
                counter++;
        }
}
相关问题