用C语言给定一个整数数组 nums 和一个整数目标值 target,并在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。
时间: 2023-03-06 22:44:23 浏览: 180
题目描述:给定一个整数数组 nums 和一个整数目标值 target,找出数组中两个整数之和等于目标值 target 的下标。
题目分析:这道题可以使用哈希表来解决。哈希表可以将查找时间降低到 O(1)。遍历数组,判断 target 减去当前元素的差是否在哈希表中,如果在则返回对应下标,否则将当前元素和下标加入哈希表中。
C 语言代码实现如下:
```
int* twoSum(int* nums, int numsSize, int target, int* returnSize){
int *result = (int*)malloc(sizeof(int)*2);
*returnSize = 2;
int map[100001] = {0}; // 哈希表,数组大小为 100001
for(int i=0; i<numsSize; i++){
if(map[target-nums[i]]){
result[0] = map[target-nums[i]]-1;
result[1] = i;
return result;
}
map[nums[i]] = i+1;
}
return result;
}
```
其中,map 数组代表哈希表,数组下标表示元素的值,数组值表示元素的下标加一。如果数组中存在元素的值为 key,其下标为 map[key]-1。
最后返回的 result 数组即为所求的两个下标。
阅读全文