oj显示time limit exceed怎么办

我估计输出结果应该没有问题吧,不过是这个问题 (๑ó﹏ò๑)

img

oj显示time limit exceed是超时了,循环层级太多了。

循环次数太多导致超时,代码可以优化一下。数组a中可以只保存不重复的数字,并用另一个数组记录每个不重复数字出现的次数,每次读取时判断新读取的数字是否已经出现过,如果出现过,就把对应的次数+1,否则就将新读取的数插入数组,并且数量置为1.
代码如下:

#include <stdio.h>
long a[1000000];
int f[1000000];
int main()
{
    int t;
    int i, n, j;
    int x;
    int nmb = 0; //记录每组数中不重复数的个数,a记录不重复的数字,f记录a中数字出现的次数
    scanf("%d", &t);
    while (t--)
    {
        scanf("%d", &n);
        nmb = 0;
        for (i = 0; i < n; i++)
        {
            scanf("%d", &x);
            //判断x是否已经存在
            for (j = 0; j < nmb; j++)
            {
                if (a[j] == x)
                {
                    f[j]++;
                    break;
                }
            }
            if (j == nmb)
            {
                a[nmb] = x;
                f[nmb] = 1;
                nmb++;
            }
        }
        //输出出现奇数次的数
        if (nmb > 0)
        {
            x = 0;
            for (i = 0; i < nmb; i++)
            {
                if (f[i] % 2 == 1)
                {
                    if (x == 0) //避免最后一个数后面有空格
                    {
                        x++;
                        printf("%lld", a[i]);
                    }
                    else
                        printf(" %lld", a[i]);
                }
            }
            printf("\n");
        }
        
    }
    return 0;
}