实用题解 方法五花八门(给出较优的两种)
2025-08-17 20:19:03
发布于:上海
41阅读
0回复
0点赞
分别是内存小和时间小两种,可以择优选择。
第一种以输入顺序为下标 MAX n=5000,可以承受并且内存较小。
第二种以输入数字为下标 每次标记已经出现过的数字,时间较快但MAX ai=1000000,内存较大。
#include<cstdio>
using namespace std;
int main()
{
    int n;
    scanf("%d",&n);
    int a[5000];
    for(int i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
        }
    for(int i=0;i<n;i++)
        {
            if(!a[i])continue;
            for(int j=i+1;j<n;j++)
                {
                    if(!a[j])continue;
                    if(a[i]==a[j])a[j]=0;
                    
                }
            printf("%d%c",a[i],' ');
        } 
}
#include<cstdio>
using namespace std;
int main()
{
    int n,x;
    scanf("%d",&n);
    int a[1000000];
    for(int i=0;i<n;i++)
        {
            scanf("%d",&x);
            if(a[x]==0)
            {
                printf("%d%c",x,' ');
                a[x]++;
            }
        }
}
全部评论 2
有实力的兄弟,但内存那里可以把int数组换为bool数组,这样能把原来的5点几MB缩小至1点几MB,我用这个达成了时空双修者
2025-10-14 来自 广东
1int最小4字节,但是bool最小是未定义[doge]
2025-10-14 来自 广东
0写错了,是尺寸16位,不是内存
2025-10-14 来自 广东
0
这个人的题解太有用了!赶紧点个赞
2025-08-17 来自 上海
1











有帮助,赞一个