用c语言解决给定一个整数数组 nums 和一个整数目标值 target,请你在记反回它们的数组下标。 尔可以假设每种输入只会对应一个答案,并且你不能使用两次尔可以按任意顺序返回答案
时间: 2024-10-24 22:17:28 浏览: 20
在C语言中,你可以使用哈希表(Hash Table 或者称为关联数组)来解决这个问题,这种方法通常被称为“两指针”或者“双指针法”。这是一个典型的查找问题,我们可以同时遍历数组,将元素及其索引入哈希表中。如果找到目标值等于nums[i]的元素,则它们的索引已经构成了答案,然后从哈希表中删除这两个元素继续搜索。当哈希表为空时,表示没有找到第二个匹配的目标值,这时数组剩余部分也可能包含答案。
下面是C语言的一个基本解决方案:
```c
#include <stdbool.h>
// 使用结构体存储元素和其索引
typedef struct {
int val;
int index;
} Element;
// 查找两个相加等于目标值的元素并返回他们的索引
void twoSum(int* nums, int numsSize, int target, int* result) {
// 创建哈希表
Element* hashTable = malloc(numsSize * sizeof(Element));
for (int i = 0; i < numsSize; ++i) {
hashTable[i].val = nums[i];
hashTable[i].index = i;
}
// 双指针,一个指向已添加到哈希表的元素,另一个遍历数组
int left = 0, right = numsSize - 1;
while (left < right) {
int sum = hashTable[left].val + hashTable[right].val;
if (sum == target) {
result[0] = hashTable[left].index;
result[1] = hashTable[right].index;
free(hashTable);
return;
} else if (sum < target) {
left++;
} else {
right--;
}
}
free(hashTable); // 如果没有找到答案,释放哈希表
}
// 示例:调用twoSum并检查结果
int main() {
int nums[] = {2, 7, 11, 15};
int target = 9;
int result[2];
twoSum(nums, sizeof(nums)/sizeof(nums[0]), target, result);
printf("Index of two numbers that add up to %d are: %d and %d\n", target, result[0], result[1]);
return 0;
}
```
阅读全文