给定一个整数,在一个整数数组中找到两个下标不同的元素,其和为给定的整数

#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;
    
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值