Java 计算数组中数字的频率

Java 计算数组中数字的频率,java,iteration,frequency,Java,Iteration,Frequency,我有一个数组,分数[5][5],里面充满了考试分数 我需要找到最常出现的分数并返回它 分为两部分:迭代分数和存储每个分数的频率。它们都涉及到使用数组/数组列表。如果您需要更多帮助,我们可以直接提问D嗯,有两个部分:迭代分数和存储每个分数的频率。它们都涉及到使用数组/数组列表。如果您需要更多帮助,我们可以直接提问D我只需创建一个HashMap,其中第一个整数是分数数组中的值,第二个是频率 然后处理填充hashmap中的数组。如果密钥已存在,请将计数增加1。如果是新密钥,请将其设置为1 然后处理ha

我有一个数组,
分数[5][5]
,里面充满了考试分数


我需要找到最常出现的分数并返回它

分为两部分:迭代分数和存储每个分数的频率。它们都涉及到使用数组/数组列表。如果您需要更多帮助,我们可以直接提问D

嗯,有两个部分:迭代分数和存储每个分数的频率。它们都涉及到使用数组/数组列表。如果您需要更多帮助,我们可以直接提问D

我只需创建一个
HashMap
,其中第一个整数是分数数组中的值,第二个是频率

然后处理填充hashmap中的数组。如果密钥已存在,请将计数增加1。如果是新密钥,请将其设置为1

然后处理hashmap以查找出现次数最大的值


一旦我访问了一台安装了Java的机器,我就打算编写源代码,但是,因为它现在被标记为家庭作业,所以它只是算法(从长远来看,这对你来说会更好):

这是我将遵循的基本算法,它由两个顺序循环组成

第一种方法只是创建一个值到计数的映射,以便以后可以找到最大计数


第二个遍历映射并创建一个具有最高计数的值的列表。

我只需创建一个
HashMap
,其中第一个整数是分数数组中的值,第二个是频率

然后处理填充hashmap中的数组。如果密钥已存在,请将计数增加1。如果是新密钥,请将其设置为1

然后处理hashmap以查找出现次数最大的值


一旦我访问了一台安装了Java的机器,我就打算编写源代码,但是,因为它现在被标记为家庭作业,所以它只是算法(从长远来看,这对你来说会更好):

这是我将遵循的基本算法,它由两个顺序循环组成

第一种方法只是创建一个值到计数的映射,以便以后可以找到最大计数


第二个在地图中运行,并创建一个计数最高的值列表。

由于分数可能在一个有界范围内(例如,
0..100
),您可以使用计数数组快速执行此操作。基本上,你正在做第一阶段的工作

所有可能得分的
计数从
0
开始,然后对于每个得分
s
,递增
count[s]
。处理完所有分数后,扫描
计数
,查看哪个
计数[k]
最高

您还可以在进行计数时跟踪最频繁的分数。就这样做吧:

// init
mostFrequent = 0;

// during increment
count[s]++;
if (count[s] > count[mostFrequent]) {
  mostFrequent = s;
}
由于您的分数排列在2d矩阵中(出于某种原因?),您可以按如下方式处理每个分数:

int[] count = new int[RANGE]; // valid scores are 0..RANGE-1

mostFrequent = 0;
for (int[] tuplet : scores) {
   for (int s : tuplet) {
     count[s]++;
     if (count[s] > count[mostFrequent]) {
        mostFrequent = s;
     }
   }
}

report(mostFrequent, count[mostFrequent]);

由于分数可能在限定范围内(例如,
0..100
),因此可以使用计数数组快速完成此操作。基本上,你正在做第一阶段的工作

所有可能得分的
计数从
0
开始,然后对于每个得分
s
,递增
count[s]
。处理完所有分数后,扫描
计数
,查看哪个
计数[k]
最高

您还可以在进行计数时跟踪最频繁的分数。就这样做吧:

// init
mostFrequent = 0;

// during increment
count[s]++;
if (count[s] > count[mostFrequent]) {
  mostFrequent = s;
}
由于您的分数排列在2d矩阵中(出于某种原因?),您可以按如下方式处理每个分数:

int[] count = new int[RANGE]; // valid scores are 0..RANGE-1

mostFrequent = 0;
for (int[] tuplet : scores) {
   for (int s : tuplet) {
     count[s]++;
     if (count[s] > count[mostFrequent]) {
        mostFrequent = s;
     }
   }
}

report(mostFrequent, count[mostFrequent]);

或者在运行过程中保留一个指向当前最大值的指针。每次创建或更新时,都要进行比较,看看是否刚刚超过了以前的最大值,如果超过了,则进行替换。
保存hashmap中的另一个过程。

或在运行时保留指向当前最大过程的指针。每次创建或更新时,都要进行比较,看看是否刚刚超过了以前的最大值,如果超过了,则进行替换。
保存hashmap的另一个过程。

对于类似的内容,请编写代码,对您在现实生活中的操作方式进行建模

让我们来模拟一下:

你的[5][5]数组:它只是一个5列5行的数字网格

从0,0位置开始-读取该位置的值,然后开始一个列表(在Java中,是ArrayList或HashMap),将数字添加到列表中,并给它一个哈希标记(值为1),以表示您见过它一次

穿过这一排,然后往左拐,再向下走一排,等等

每读一个数字,检查是否已经在你的列表中。如果是,只需做另一个哈希标记(添加1)。如果没有,则将该号码添加到您的列表中,并给它一个哈希标记

读取完数组后,从一开始就查看列表,并通过将手指放在上面(将数字存储在变量中)来跟踪哈希标记最多的数字


返回最后一个变量。

对于类似的情况,请编写代码,模拟您在现实生活中的工作方式

让我们来模拟一下:

你的[5][5]数组:它只是一个5列5行的数字网格

从0,0位置开始-读取该位置的值,然后开始一个列表(在Java中,是ArrayList或HashMap),将数字添加到列表中,并给它一个哈希标记(值为1),以表示您见过它一次

穿过这一排,然后往左拐,再向下走一排,等等

每读一个数字,检查是否已经在你的列表中。如果是,只需做另一个哈希标记(添加1)。如果没有,则将该号码添加到您的列表中,并给它一个哈希标记

读取完数组后,从一开始就查看列表,并通过将手指放在上面(将数字存储在变量中)来跟踪哈希标记最多的数字


返回最后一个变量。

您是这个道尔顿吗?这个问题有关吗?是的,为什么这对某些原因很重要