查找数组的最高频率以及具有该频率的所有元素

Finding the highest frequency of an array and all elements which have that frequency

我被要求从元素数组和具有所述频率的所有元素中找到最高频率。我的代码似乎工作得很好,但是当我提交它时,它似乎在某个地方出错了。谁能帮我找出错误?

格式输入: 第一行包含一个整数 T,表示测试用例的数量。对于每个测试用例,第一行包含一个整数 N,表示数组中元素的数量。下一行N个整数Xi(1≤i≤N)表示数组中第i个元素

格式输出: 由 T 行组成,每行的格式为“Case #X: Y”,其中 X 是从 1 开始的测试用例编号,Y 是最高频率。下一行包含所有具有该频率的元素,并按升序排序。

约束条件: 1 ≤ T ≤ 20 | 2 ≤ N ≤ 20.000 | 1 ≤ Xi ≤ 2 × 10^5

示例输入:

3
8
1 1 2 2 3 4 5 5
8
5 5 4 3 2 2 1 1 
4
1 1 1 3

示例输出:

Case #1: 2
1 2 5
Case #2: 2
1 2 5
Case #3: 3
1

这是我的代码:

#include <stdio.h>

int main() {
    int T, N[20];

    scanf("%d", &T); getchar();
    
    int A[T][20000];
    
    
    
    for (int i = 0; i<T; i++) {
        scanf("%d", &N[i]); getchar();
        for (int j = 0; j<N[i]; j++) {
            scanf("%d", &A[i][j]); getchar();
        }
        
        int X = 0;
        
        for (int j = 0; j<N[i]; j++) {
            for (int k = j + 1; k<N[i]; k++) {
                if (A[i][k]<A[i][j]) {
                    X = A[i][j];
                    A[i][j] = A[i][k];
                    A[i][k] = X;
                }
            }
        }
    }
    
    int f[20000];
    
    for (int i = 0; i<T; i++) {
        int c = 0, mc = 0;
        
        for (int j = 0; j<N[i]; j++) {
            c = 1;
            if(A[i][j] != -1) {
                for (int k = j+1; k<N[i]; k++) {
                    if (A[i][j] == A[i][k]) {
                        c++;
                        A[i][k] = -1;
                        
                    }   
                }
                
                f[j]=c;
            }   
            if (c>mc) {
                    mc = c;
                }
        }
        printf("Case #%d: %d\n", i+1, mc);
        
        for (int j = 0; j<N[i]; j++) {
            if (A[i][j] != -1) {
                if (f[j] == mc) {
                    printf ("%d", A[i][j]);
                    if (j<N[i]-1) {
                        printf(" ");
                    }
                }
                
            }
            
        }
        
        printf("\n");
        
    }
    
    return 0;
}

编辑 所以我做了另一个代码,而不是一次输入所有数组并一次输出所有内容,这段代码在我输入第一个数字数组后输出频率和元素。但似乎代码仍然有问题,我找不到哪里......P.s我对此很陌生,所以我对我的代码效率低下表示歉意。

新代码

#include <stdio.h>

int main() {
    int T, N;

    scanf("%d", &T); getchar();
    
    int A[20000];
    
    for (int i = 0; i<T; i++) {
        scanf("%d", &N); getchar();
        for (int j = 0; j<N; j++) {
            scanf("%d", &A[j]); getchar();
        }
        
        int X;
        
        for (int j = 0; j<N; j++) {
            for (int k = j + 1; k<N; k++) {
                if (A[k]<A[j]) {
                    X = A[j];
                    A[j] = A[k];
                    A[k] = X;
                }
            }
        }
        
        int f[N], c = 0, mc = 0;
        
        for (int j = 0; j<N; j++) {
            c = 1;
            if(A[j] != -1) {
                for (int k = j+1; k<N; k++) {
                    if (A[j] == A[k]) {
                        c++;
                        A[k] = -1;
                    }   
                }
                f[j]=c;
                if (c>mc) {
                        mc = c;
                }
            }   
        }
        printf("Case #%d: %d\n", i+1, mc);
        
        for (int j = 0; j<N; j++) {
            if (A[j] != -1) {
                if (f[j] == mc) {
                    printf ("%d", A[j]);
                    if (j<N-1) {
                        printf(" ");
                    }
                }   
            }   
        }
        printf("\n");
    }
    
    return 0;
}

我花了几天时间,但我终于明白了如何做到这一点。显然,它并不像我想象的那么复杂......这是工作代码。感谢所有帮助过的人:)

#include <stdio.h>

int main() {
    int T, N;
    
    scanf("%d", &T);
    
    for (int i = 0; i<T; i++) {
        
        scanf("%d", &N); getchar();
        
        //INPUT elements and counting frequncy for each element
        int f[200001] = {0}, E = 0;
        for (int j = 0; j<N; j++) {
            scanf("%d", &E); getchar();
            f[E]++;
        }
        
        //find max frequency and how many elements with max frequency
        int max = 0, c = 0;
        for (int j = 1; j<200001; j++) {
            
            if (f[j] == max) {
                c ++;
            }
            
            if (f[j]>max) {
                max = f[j];
                c = 1;
            }
            
        }
        
        //OUTPUT result
        printf("Case #%d: %d\n", i+1, max);
        int counter = 0;
        for (int j = 1; j<200001; j++) {
            if (f[j] == max) {
                
                counter ++;
                if (counter<c){
                    printf("%d ", j);   
                } else {
                    printf("%d\n", j);
                }
                
            } 
        }
    }
    return 0;
}