给定一个整数,在一个整数数组中找到两个下标不同的元素,其和为给定的整数
程序员文章站
2024-03-15 20:25:24
...
#include<stdio.h>
#include<stdlib.h>
#include"uthash.h"
typedef struct hash_map
{
int key;
int value;
UT_hash_handle hh;
} HashMap;
HashMap* map;
HashMap* find(int key)
{
HashMap* temp = NULL;
HASH_FIND_INT(map, &key, temp);
return temp;
}
void add(int key, int value)
{
HashMap* temp = find(key);
if (!temp)
{
temp = (HashMap*)calloc(1, sizeof(HashMap));
temp->key = key;
HASH_ADD_INT(map, key, temp);
}
temp->value = value;
}
int* twoSum(int* nums, int numsSize, int target, int* returnSize)
{
map = NULL;
int* rNums = NULL;
*returnSize = 0;
HashMap* temp = NULL;
int key = 0;
for (int i = 0; i < numsSize; i++)
{
temp = find(target - nums[i]);
if (temp)
{
*returnSize = 2;
rNums = (int*)calloc(*returnSize, sizeof(int));
rNums[0] = temp->value;
rNums[1] = i;
break;
}
add(nums[i], i);
}
return rNums;
}
int main(void)
{
int nums[4] = { 11, 2, 15, 7 };
int* rSize = (int*)calloc(1, sizeof(int));
int* rNums = twoSum(nums, 4, 9, rSize);
if (*rSize)
printf("[%d, %d]\n", rNums[0], rNums[1]);
else
printf("[]\n");
return 0;
}
下一篇: 符号表以及在有序数组中的二分查找
推荐阅读
-
给定一个整数,在一个整数数组中找到两个下标不同的元素,其和为给定的整数
-
给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。
-
给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。
-
给定一个整数数组,检测是否存在一个和为零的子数组
-
416.分割等和子集(给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。)
-
部分排序,给定一个整数数组,编写一个函数,找出索引m和n,只要将索引区间[m,n]的元素排好序,整个数组就是有序的。
-
刷题之给定一个整数数组 nums 和一个目标值 taget,请你在该数组中找出和为目标值的那 两个 整数
-
算法题:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
-
给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
-
LeetCode 1 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。