给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。 你可以按任意顺序返回答案。用c写
时间: 2024-10-13 18:00:39 浏览: 30
这是一个经典的双指针算法问题,通常称为“两数之和”。在C语言中,可以使用哈希表或者直接遍历数组来解决这个问题。以下是使用哈希表的解决方案:
```c
#include <stdio.h>
#include <stdbool.h>
bool findTwoSum(int* nums, int numsSize, int target) {
// 创建一个空的哈希表
int hash[10001] = {0};
for (int i = 0; i < numsSize; i++) {
// 如果哈希表中有目标值减去当前元素的值,则找到了解
if (hash[target - nums[i]] != 0)
return true;
// 否则,将当前元素的值添加到哈希表中
hash[nums[i]] = i + 1;
}
// 没有找到解,返回false
return false;
}
int main() {
int nums[] = {2, 7, 11, 15};
int numsSize = sizeof(nums) / sizeof(nums[0]);
int target = 9;
if (findTwoSum(nums, numsSize, target)) {
printf("存在两个元素,它们的下标分别是 %d 和 %d\n", hash[target - nums[0]], hash[nums[1]]);
} else {
printf("不存在这样的两个元素。\n");
}
return 0;
}
```
在这个代码中,我们首先初始化一个大小为10001(因为数组范围通常是负10000到10000)的哈希表。然后遍历数组,对于每个元素,如果哈希表中存在`target - nums[i]`,说明已经找到了一对满足条件的元素,返回它们的下标;如果没有找到,就将当前元素及其下标存入哈希表。
阅读全文