問題描述
某次科研調查時得到了N個自然數,每個數均不超過15億(1.5 * 109)。已知不相同的數不超過10000個,現在需要統計這些自然數各自出現的次數,並按照自然數從小到大的順序輸出統計結果。
思路
1.用數組裝下所有數,之後利用排序()函數對數組中的所有元素進行排序
2.將第一個元素定爲哨兵,定義conut變量用以統計元素出現次數,其初值爲1
3.遍歷第二個到的第N個元素,若哨兵與第i(2~N)個元素相等,則次數加1
4.若哨兵與第i(2~N)個元素不相等,則輸出哨兵值與當前的計數值,並將哨兵更換當前的元素,並使計數值爲1
5.遍歷到最後一個元素時,輸出哨兵值與當前的計值
代碼
#include<iostream>
#include<algorithm>
using namespace std;
long long a[200001];
int main() {
long n;
cin>>n;
for(int i=0; i<n; i++) {
cin>>a[i];
}
sort(a,a+n);
long long sentry = a[0];
int count = 1;
for(int i=1; i<n; i++) {
if(sentry!=a[i]) {
cout<<sentry<<" "<<count<<endl;
sentry=a[i];
count=1;
} else {
count++;
}
if(i==n-1) {
cout<<sentry<<" "<<count<<endl;
}
}
return 0;
}
輸出結果