c语言 给定一个整数数组 n和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同一个元素进行求和。
时间: 2024-12-02 10:14:05 浏览: 15
在C语言中,这个问题可以使用哈希表(Hash Table)或者双指针法来解决。这里我们介绍一种常见的解决方案——双指针法。
首先,创建两个指针,一个指向数组的开始(i=0),另一个指向数组的结束(j=n-1)。然后,我们可以循环比较两个指针所指向的元素之和与目标值target:
1. 当`arr[i] + arr[j]`等于`target`时,找到了一对符合条件的数,直接返回`i`和`j`作为结果。
2. 如果`arr[i] + arr[j]`小于`target`,说明需要更大的数来补足,所以将左指针`i`向右移动一位。
3. 如果`arr[i] + arr[j]`大于`target`,说明需要更小的数,所以将右指针`j`向左移动一位。
4. 当两个指针相遇而仍未找到合适的一对,表明不存在这样的组合,返回空或特定表示未找到的值(取决于题目规定)。
以下是伪代码实现:
```c
int* twoSum(int arr[], int n, int target) {
// 初始化两个指针
int i = 0, j = n - 1;
// 创建哈希表存储已访问过的元素值及其索引
unordered_map<int, int> map;
while (i < j) {
int sum = arr[i] + arr[j];
if (sum == target) {
return &arr[i], &arr[j]; // 返回指针地址
} else if (sum < target) {
i++;
} else { // sum > target
j--;
}
}
// 没有找到解,返回NULL或其他特殊值
return NULL;
}
```
阅读全文