今天是c语言基础打卡的第31天,今天主要是hash表的问题,算是hash表的入门呗。
相关链接:
【第31题】无冲突的哈希表问题 | 计数法的简单应用
全文大约阅读时间: 10min
🧑🏻作者简介:一个从工业设计改行学嵌入式的年轻人
✨联系方式:2201891280(QQ)
🎁主要知识点
计数法的简单应用
#include <stdio.h>
#include <string.h> // (1)
#define maxn 1000001
int h[maxn];
int main() {
int n, x;
int i, j;
int hasPrint;
while(scanf("%d", &n) != EOF) {
memset(h, 0, sizeof(h)); // 初始化hash表
while(n--) {
scanf("%d", &x);
++h[x]; //将每个元素插入
}
hasPrint = 0;
for(i = 0; i < maxn; ++i) { // 从小到大输出
if(h[i]) {
for(j = 0; j < h[i]; ++j) {
if(hasPrint) {
printf(" "); //控制格式化输出
}
printf("%d", i);
hasPrint = 1;
}
}
}
printf("\n");
}
return 0;
}
📓课后习题
448. 找到所有数组中消失的数字
给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。
解题思路
直接创建hash表 然后做统计输出结果就好了。
int* findDisappearedNumbers(int* nums, int numsSize, int* returnSize){
int innums[100001] ={0}; //hash表
int *ans = malloc(sizeof(int) * numsSize);
for(int i =0; i < numsSize;++i) //插入元素
innums[nums[i]] = 1;
int ansnum = 0; //输出元素个数
for(int i = 1;i < numsSize + 1; ++i)
if(!innums[i]) ans[ansnum++] = i;//有点类似于队列的思想
*returnSize = ansnum;
return ans;
}
📑写在最后
最近考试,题目还好不难,不然真的是很难坚持下去呀。大家一起加油。这个c语言打卡也是从之前的几十人到现在就十几个人了0.0