求解一个序列中出现次数最多的元素问题c
时间: 2023-11-13 18:03:00 浏览: 50
可以使用哈希表来解决这个问题。具体步骤如下:
1. 建立一个空的哈希表,用于存储每个元素出现的次数。
2. 遍历序列中的每个元素,如果该元素不在哈希表中,则将该元素作为键,值设为1存入哈希表中;如果该元素已经在哈希表中,则将该元素对应的值加1。
3. 遍历完整个序列后,遍历哈希表,找到值最大的键,即为出现次数最多的元素。
下面是一个简单的 C 语言实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_N 1000
int main() {
int a[MAX_N], n, i, max_count = 0, max_num = 0;
int *counts = (int*)calloc(MAX_N, sizeof(int)); // 哈希表
// 读入序列
printf("请输入序列长度:");
scanf("%d", &n);
printf("请输入序列:");
for (i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
// 统计出现次数
for (i = 0; i < n; i++) {
counts[a[i]]++;
}
// 找到出现次数最多的元素
for (i = 0; i < MAX_N; i++) {
if (counts[i] > max_count) {
max_count = counts[i];
max_num = i;
}
}
printf("出现次数最多的元素是 %d,出现次数为 %d。\n", max_num, max_count);
free(counts);
return 0;
}
```
注意,这个实现中使用了一个大小为 MAX_N 的静态哈希表,如果序列中的元素超出了哈希表的范围,就会出错。实际使用中应该根据输入的序列动态调整哈希表的大小。