给定一个整数数组nums和一个整数目标值 请你在该数组中找出和为目标值target target 的那两个整数,并返回它们的数组下标 你可以假设每种输入只会对应一个答案,并且你不 能使用两次相同的元素 你可以按任意顺序返回答案 C语言
时间: 2024-09-15 16:08:27 浏览: 32
两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个
在C语言中,解决这个问题通常会使用哈希表(Hash Table)或者双指针法(Two Pointers)。这里给出一种简单的双指针解决方案:
```c
#include <stdio.h>
// 定义一个结构体来存储元素及其索引
typedef struct {
int val;
int index;
} Element;
// 使用双指针法寻找目标值
int* twoSum(int nums[], int target, int n) {
// 初始化两个指针,left指向数组开始,right指向数组结束
int left = 0, right = n - 1;
// 创建一个哈希表(映射数组元素到其索引)
Element hash[n];
for (int i = 0; i < n; i++) {
hash[i].val = nums[i];
hash[i].index = i;
}
// 遍历哈希表
while (left < right) {
int sum = hash[left].val + hash[right].val;
if (sum == target) {
return &hash[left].index; // 返回左指针对应的地址
} else if (sum < target) {
left++; // 目标大了,向右移动左指针
} else {
right--; // 目标小了,向左移动右指针
}
}
// 如果没有找到,返回NULL表示未找到匹配对
return NULL;
}
int main() {
int nums[] = {2, 7, 11, 15};
int target = 9;
int n = sizeof(nums) / sizeof(nums[0]);
int* result = twoSum(nums, target, n);
if (result != NULL) {
printf("Index of the pair is %d\n", *result);
} else {
printf("No such pair found.\n");
}
return 0;
}
```
阅读全文