贪心算法求解一个序列中出现次数最多的元素问题
题目:
指定n个正整数,编写一个实验程序找出它们中出现次数最多的数。如果这样的数有多个,请输出其中最小的一个。
输入描述:输入的第1行只有一个正整数n(1<=n<=1000),表示数字的个数;输入的第2行有n个整数s1、s2、…、sn(1<=i<=n)。相邻的数用空格分隔。
输出描述:输出这n个次数中出现次数最多的数。如果这样的数有多个,输出其中最小的一个。
输入样例:
6
10 1 10 20 30 20
输出样例:
10
解题思路:
将输入的数组从小到大排好序,扫描排好序的数组,一旦发现当前元素与上一个元素不一样,立即建立新的集合以统计新元素的值和次数。
代码如下:
#include<stdio.h>
#include<queue>
using namespace std;
#define MAX 50
int n; //输入的个数
//int Input[]={10,1,10,20,30,20}; //输入的数组
int Input[MAX];
struct NodeType{
int num;
int cishu;
bool operator<(const NodeType &s) const{
//重载关系函数
return s.num<num;
}
};
NodeType JH