哈希表 counts[num]
时间: 2023-07-19 14:37:55 浏览: 79
这是一个使用哈希表的操作,counts是一个哈希表,num是作为哈希表的键值,该操作的作用是增加num对应的值的计数器。如果counts中还没有num作为键值,则会创建一个新的键值为num的项,并将其计数器初始化为1。如果已经存在num键值,则会将其对应的计数器加1。这样可以方便地统计元素出现的次数。
相关问题
将上述代码优化,不使用结构体,就用一个数组充当哈希表
如果你想用一个一维数组替代结构体作为哈希表,可以将数组中的每个元素同时存储整数和它的计数。但是请注意,这样做会使得数组的大小加倍,因为我们需要两个元素来表示一个整数及其计数。下面是相应的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;
}
```
在这个版本中,我们遍历数组时需要注意索引变化,以及找到最频繁整数时需要将其从计数值恢复为原始整数。
1740 - 统计每个数出现的次数c++
这道题目需要统计一个数组中每个数出现的次数,并将结果存储在一个新的数组中。可以使用哈希表来实现这个功能,具体步骤如下:
1. 创建一个哈希表,用来存储每个数出现的次数。
2. 遍历数组,对于每个数,如果它在哈希表中不存在,就将它作为键添加到哈希表中,并将值设为1;如果它已经存在,就将对应的值加1。
3. 创建一个新的数组,遍历哈希表,将每个键值对转化为一个元组,然后将元组添加到新数组中。
4. 将新数组按键从小到大排序,然后返回结果。
下面是Python实现代码:
```python
def count(nums):
# 创建哈希表
counts = {}
# 统计每个数出现的次数
for num in nums:
if num not in counts:
counts[num] = 1
else:
counts[num] += 1
# 将统计结果转化为元组,添加到新数组中
result = []
for key, value in counts.items():
result.append((key, value))
# 按键从小到大排序
result.sort(key=lambda x: x[0])
return result
```
使用示例:
```python
>>> count([1, 3, 2, 1, 2, 3, 1, 2, 2, 2])
[(1, 3), (2, 6), (3, 2)]
```