将上述代码优化,不使用结构体,就用一个数组充当哈希表
时间: 2024-10-04 20:02:13 浏览: 16
如果你想用一个一维数组替代结构体作为哈希表,可以将数组中的每个元素同时存储整数和它的计数。但是请注意,这样做会使得数组的大小加倍,因为我们需要两个元素来表示一个整数及其计数。下面是相应的C代码:
```c
#include <stdio.h>
#define MAX_INT 1000
int counts[2*MAX_INT]; // 使用两倍的MAX_INT作为数组长度
int main() {
int N, temp;
scanf("%d", &N);
// 初始化所有计数为0
for (int i = 0; i < 2*MAX_INT; i += 2) {
counts[i] = i / 2; // 存储整数部分
counts[i+1] = 0; // 存储计数部分
}
while (N--) { // 遍历输入的整数
scanf("%d", &temp);
if (temp >= 0 && temp < MAX_INT) { // 确保在范围内
counts[temp*2 + 1]++;
}
}
int max_count = counts[MAX_INT * 2];
int most_frequent_num = counts[MAX_INT];
for (int i = MAX_INT * 2 - 1; i >= 0; i -= 2) {
if (counts[i + 1] > max_count) { // 更新最大次数和对应数
max_count = counts[i + 1];
most_frequent_num = counts[i] / 2; // 计算实际整数
}
}
printf("%d %d\n", most_frequent_num, max_count); // 输出结果
return 0;
}
```
在这个版本中,我们遍历数组时需要注意索引变化,以及找到最频繁整数时需要将其从计数值恢复为原始整数。
阅读全文