问题标题: 酷町堂:3972 !(去重)排序

0
0
已解决
张帆
张帆
中级天翼
中级天翼
#include<bits/stdc++.h>
using namespace std;
int a[10001];
int main(){
    long long n;
    int h;
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>h;
        a[h]++;
    }
    for(int i=0;i<n;i++){
        if(a[i]==1)
            a[i]=0;
    }
    for(int i=0;i<n;i++)
        while(a[i]--)
            cout<<i<<" ";
    return 0;
}

Only twenty

只有20


0
已采纳
臧鸿志
臧鸿志
初级天翼
初级天翼

利用桶,无论是去重排序,还是不去重排序,只要涉及到排序,得遍历桶数组,而不是原数组。

而利用桶去重不排序那题,遍历的就是原数组。

0
周明轩
周明轩
资深光能
资深光能

第1,

long long n;



……



……



for(int i=0;i<n;i++)

i和n类型不一样。

第2,

for(int i=0;i<n;i++){
        if(a[i]==1)
            a[i]=0;
    }
    for(int i=0;i<n;i++)
        while(a[i]--)
            cout<<i<<" ";

我建议你改成:

for(i=1;i<=n;i++)
    {
        if(b[i]>1)
        {
            while(b[i]>0)
            {
                cout<<i<<' ';
                b[i]--;
            }
        }
    }

望采纳

周明轩在2020-03-27 14:49:33追加了内容
for(int i=0;i<n;i++){
        cin>>h;
        a[h]++;
    }

应该是:

for(int i=0;i<n;i++){
        cin>>h;
        a[h-1]++;
    }

 

0
周明轩
周明轩
资深光能
资深光能
for(int i=0;i<n;i++){
        if(a[i]==1)
            a[i]=0;
    }
    for(int i=0;i<n;i++)
        while(a[i]--)
            cout<<i<<" "

不应该是n;

我之前发错了。

应该是

从1到10000

 

0
包涵宇
包涵宇
中级天翼
中级天翼

你的思路我懂

这里

 

 

for(int i=0;i<n;i++){

 

if(a[i]==1)

 

a[i]=0;

 

}

应该改为

 

 

for(int i=0;i<=10000;i++){

 

if(a[i]==1)

 

a[i]=0;

 

}

望采纳!!!

0
0
我要回答