给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。 你可以按任意顺序返回答案。(c语言)
时间: 2024-12-11 12:24:52 浏览: 12
这是一个经典的算法问题,通常被称为“两数之和”或者“双指针”算法。在C语言中,可以使用哈希表(散列表)或者线性查找的方式来解决这个问题。以下是使用哈希表的一个简单解决方案:
```c
#include <stdio.h>
#include <stdlib.h>
// 使用哈希表存储元素及其索引
int* twoSum(int* nums, int nums_size, int target) {
// 初始化一个空的哈希表
int* hash_table = (int*) malloc(nums_size * sizeof(int));
for (int i = 0; i < nums_size; ++i) {
// 计算目标值减去当前元素的差值
int complement = target - nums[i];
// 如果差值已经在哈希表中,则找到解,返回两个元素的索引
if (hash_table[complement] != -1) {
return &nums[hash_table[complement]], &nums[i];
}
// 否则,将当前元素及索引存入哈希表
hash_table[nums[i]] = i;
}
// 没有找到解,返回NULL
free(hash_table);
return NULL;
}
int main() {
int nums[] = {2, 7, 11, 15};
int nums_size = sizeof(nums) / sizeof(nums[0]);
int target = 9;
int* result = twoSum(nums, nums_size, target);
if (result) {
printf("The two numbers are at indices %d and %d.\n", result[0], result[1]);
} else {
printf("No solution found.\n");
}
return 0;
}
```
阅读全文