java - Java中无需排序即可查找众数和众数频率

标签 java arrays nested-loops frequency mode

我是 Java 新手,我在周末项目中遇到了一个需要解决的问题。我遇到了一些麻烦,希望得到你的帮助。请理解我是初学者。如果我有什么地方说错了,请向我解释。我希望有一天也能成为一名优秀的程序员。

我进行了彻底的搜索,并找到了诸如“热图”或“数组列表”之类的答案,这些东西我可能不会被允许使用,因为我还没有学会它。

好的,所以给我的问题是:

Find: 1) Mode, the most frequently occurring marks in the class. If 2 or more marks occur equally frequently, then the highest of these marks is the mode.

2) Mode Frequency: Frequency of mode.

It is assumed that the class has 10 students and marks are between 0 to 100.You are not allowed to sort the marks.

这是我查找模式的代码:

void mode()
{
    int c[]=new int[10];
    int arr[]=new int[10];
    for (int i=0;i<10;i++)
    {   
        for (int j=i+1;j<10;j++)
        {
            for (int k=0;k<10;k++)
            {
                if (marks[i]!=arr[k])
                {               
                    if (marks[i]==marks[j])
                    {
                        c[i]++;
                        break;
                    }   
                }
            }
            arr[i]=marks[i];
        }
    }
    for (int k=0;k<10;k++)
    {
        System.out.println();
        System.out.println(c[k]);
    }
}

其中marks[]是我输入的int数组,c[]是统计该数字出现的次数,arr[]是一个数组,用于交叉检查该数字之前是否出现过。

假设输入的 10 个数字是 99, 95, 97, 92, 80, 95, 73, 80, 95, 80。可以看到 95 和 80 出现了 3 次。

所以我的 c[] 应该有 {0, 2, 0, 0, 2, 0, 0, 0, 0, 0},但是当我运行它时,它变成了 {0, 2, 0, 0, 2, 1, 0, 1, 0, 0},这意味着我的程序没有与 arr[] 进行交叉检查。

我认为我使用了三个 for 循环,搞得一团糟。我似乎不知道如何解决它。

最佳答案

一种解决方案是将长度为 101 的数组初始化为零。该数组表示特定标记出现的次数。每次遇到特定标记时,都会增加计数。然后要找到模式,您只需找到计数最高的索引即可。

关于java - Java中无需排序即可查找众数和众数频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24842585/

相关文章:

C - 嵌套 For 循环永不停止

java - 在 while 语句中使用 boolean 变量

java - 为什么以下带有循环泛型的代码无法编译?

java - 显示多个结果数组搜索

java - 在java中使用SAX解析器解析和更新xml

php - 使用 PHP 解析 JSON 文件

arrays - 给定数组部分已排序部分未排序,如何找到特定元素?

c# - 保存 3D int 数组的最快方法? (XNA\C#)

python - 有没有一种方法可以对计算 Spearman 相关性及其 p 值的嵌套循环进行矢量化?

python - 如何 for 循环遍历两个嵌套循环内的字符串列表并避免外部循环造成的冗余?