哈希表两数之和c语言
时间: 2023-11-12 18:07:12 浏览: 117
哈希表算法实现 C语言
4星 · 用户满意度95%
哈希表可以用来解决两数之和的问题。在C语言中,我们可以使用哈希表来记录每个元素的值和对应的索引。然后遍历数组,对于每个元素,我们可以检查哈希表中是否存在目标值减去当前元素的差值,如果存在,则找到了符合条件的两个数。
下面是一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int value;
int index;
} HashNode;
int* twoSum(int* nums, int numsSize, int target, int* returnSize) {
HashNode* hashTable = (HashNode*)malloc(numsSize * sizeof(HashNode));
int* result = (int*)malloc(2 * sizeof(int));
for (int i = 0; i < numsSize; i++) {
hashTable[i].value = -1;
hashTable[i].index = -1;
}
for (int i = 0; i < numsSize; i++) {
int complement = target - nums[i];
int hashIndex = abs(complement) % numsSize;
while (hashTable[hashIndex].value != -1 && hashTable[hashIndex].value != complement) {
hashIndex = (hashIndex + 1) % numsSize;
}
if (hashTable[hashIndex].value == complement) {
result[0] = hashTable[hashIndex].index;
result[1] = i;
*returnSize = 2;
break;
}
hashTable[hashIndex].value = nums[i];
hashTable[hashIndex].index = i;
}
free(hashTable);
return result;
}
int main() {
int nums[] = {2, 7, 11, 15};
int target = 9;
int returnSize;
int* result = twoSum(nums, sizeof(nums) / sizeof(nums[0]), target, &returnSize);
printf("Indices: %d, %d\n", result[0], result[1]);
free(result);
return 0;
}
```
这里定义了一个哈希表结构 `HashNode`,包含值和索引两个字段。`twoSum` 函数接受一个整数数组 `nums`、数组长度 `numsSize`、目标值 `target` 和指向返回结果大小的指针 `returnSize`。函数使用哈希表记录每个元素的值和索引,然后遍历数组进行查找,找到符合条件的两个数后,将它们的索引保存在 `result` 数组中,并通过 `returnSize` 返回结果大小。
在主函数中,我们使用示例数组 `{2, 7, 11, 15}`,目标值为 `9`。执行 `twoSum` 函数后,会得到符合条件的两个数在数组中的索引,并打印输出。
希望能帮到你!如有疑问,请继续提问。
阅读全文