#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;
}
给定一个整数,在一个整数数组中找到两个下标不同的元素,其和为给定的整数
最新推荐文章于 2022-09-01 17:19:56 发布