现在的位置: 首页 > 综合 > 正文

求一个数组中出现次数最多的数

2013年10月12日 ⁄ 综合 ⁄ 共 1381字 ⁄ 字号 评论关闭

描叙:一大推数据里面,数字与数字之间用空格隔开,找出出现次数最多的一个数字的算法

#include<stdio.h>

void FindMostTimesDigit(int *Src , int SrcLen)
{
	int element , has = SrcLen;
	int MaxNum , TempCount = 0 , MaxCount = 0;
	int i , j;
	int *result = new int[];
	while(has != 0)
	{
		element = Src[has - 1];
		TempCount = 0;
		for(i = has - 1 ; i >= 0 ; --i)
		{
			//如果找到,则计数加1 ,然后将数据和末尾交换
			//这也是为何要从末尾开始循环的理由
			if(element == Src[i])
			{
				TempCount++;
				Src[i] = Src[has - 1];
				has--;
			}
		}

		if(TempCount > MaxCount)
		{
			MaxCount = TempCount;
			MaxNum = 0;
			result[MaxNum] = element;
		}
		else if(TempCount == MaxCount)
		{
			result[++MaxNum] = element;
		}
	}

	printf("出现次数最多的次数:%d\n" , MaxCount);
	for(j = 0 ; j <= MaxNum ; ++j)
		printf("%d " , result[j]);
	printf("\n");

}

int main()
{
	int list[] = {1,2,3,4,3,3,2,2,1,1,4,4,4,1,2};
	int length = sizeof(list) / sizeof(int);

	FindMostTimesDigit(list , length);

	return 0;
}

C++解法如下:

#include<iostream>
#include<map>
#include<utility>
using namespace std;

int main()
{
	map<int , int> word_count;
	int number;
	while(cin>>number)
	{
		pair<map<int , int>::iterator , bool> ret = word_count.insert(make_pair(number , 1));
		if(!ret.second)
			++ret.first->second;
	}

	for(map<int , int>::iterator iter = word_count.begin() ; iter != word_count.end() ; ++iter)
		cout<<(*iter).first<<"\t\t"
		    <<(*iter).second<<endl;

	return 0;
}

更简洁的方法如下:

#include<iostream>
#include<map>
#include<utility>
using namespace std;

int main()
{
	map<int , int> word_count;
	int number;

	while(cin>>number)
		++word_count[number];

	for(map<int , int>::iterator iter = word_count.begin() ; iter != word_count.end() ; ++iter)
		cout<<(*iter).first<<"\t\t"
		    <<(*iter).second<<endl;

	return 0;
}

抱歉!评论已关闭.