给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。 你可以按任意顺序返回答案。用c语言回答
时间: 2024-10-08 10:08:34 浏览: 28
这个问题描述的是著名的“两数之和”(Two Sum)算法题。在 C 语言中,我们可以使用哈希表(HashMap 或 unordered_map)来解决它。以下是简单的解决方案:
```c
#include <stdio.h>
#include <unordered_map>
// Function to find the two numbers whose sum is target
int* twoSum(int* nums, int nums_size, int target) {
// Create an empty map
std::unordered_map<int, int> map;
// Iterate through the array
for (int i = 0; i < nums_size; i++) {
// If the difference between the target and current number is in the map,
// we found a pair
if (map.find(target - nums[i]) != map.end()) {
return new int[] { map[target - nums[i]], i };
}
// Otherwise, add the current number to the map with its index as value
map[nums[i]] = i;
}
// If no such pair exists, return NULL or an error code
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]);
delete[] result; // Don't forget to free the memory
} else {
printf("No pair found for target %d.\n", target);
}
return 0;
}
```
在这个程序中,我们遍历数组,如果目标值减去当前元素的差在哈希表中存在,说明找到了一对和为目标值的数。反之,我们将当前元素及其索引加入到哈希表中。如果没有找到匹配的数对,函数将返回 NULL。
阅读全文