输入整数数组 nums 和一个整数目标值 target,请你在该数组中找 出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元 素。
时间: 2024-10-24 14:14:20 浏览: 26
这是一个经典的计算机科学问题,通常被称为“两数之和”或“寻找数组中的和”。要解决这个问题,我们可以使用哈希表(散列表)的数据结构。这里是一个简单的 C 语言解决方案:
```c
#include <stdio.h>
// Function to find the indices of two numbers that add up to target
int[] twoSum(int* nums, int numsSize, int target) {
// Initialize an empty hash table (dictionary)
int hashTable[target + 1] = {0};
// Iterate through the array
for (int i = 0; i < numsSize; i++) {
// If we've found a complement in the hash table (target - nums[i])
if (hashTable[target - nums[i]] != 0) {
// Return the indices
return new int[]{i, hashTable[target - nums[i]]};
}
// Add current element's index to the hash table with its value
hashTable[nums[i]] = i;
}
// If no pair is found, return NULL or an error code
return {-1, -1}; // Or some appropriate default values
}
int main() {
int nums[] = {2, 7, 11, 15};
int target = 9;
int result[2] = twoSum(nums, sizeof(nums)/sizeof(nums[0]), target);
if (result[0] != -1) {
printf("Indices of the two numbers: %d and %d\n", result[0], result[1]);
} else {
printf("No pair found.\n");
}
return 0;
}
```
这个程序的工作原理是遍历数组,对于每个元素,检查哈希表中是否存在它的补数(即 `target - nums[i]`)。如果存在,就找到了一对和为 `target` 的数字,返回它们的索引;如果没有,则添加当前元素及其索引到哈希表中继续搜索。
阅读全文