求n個自然數中每個數字出現的次數

問題描述

某次科研調查時得到了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;
}

 

輸出結果

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章