算法:两数之和(哈希算法)

题目来源

LeetCode:https://leetcode-cn.com/problems/two-sum

分析

具体思想可以参考这个题解的演示:https://leetcode-cn.com/problems/two-sum/solution/tu-jie-guan-fang-tui-jian-ti-jie-liang-s-02xs/,LeetCode中使用的哈希算法是通过uthash.h这个文件实现的,该文件本来是个开源项目,目前已整合到gcc中,关于其使用请参考uthash的文档:https://troydhanson.github.io/uthash/userguide.html。

我的程序

struct numsHash{
    int key;	// 键值
    int val;	// 数据
    UT_hash_handle hh;
};
struct numsHash* pNumsHashHead = NULL;

struct numsHash* Find_NumsHash(int targetKey)	// 定义查询函数
{
    struct numsHash *pReturn;
    HASH_FIND_INT(pNumsHashHead, &targetKey, pReturn);
    return pReturn;
}

void Add_NumsHash(int addKey, int addVal)
{
    struct numsHash* pTarget = Find_NumsHash(addKey);
    if(pTarget == NULL){
        struct numsHash* pTempHash = malloc(sizeof(struct numsHash));
        pTempHash->key = addKey;
        pTempHash->val = addVal;
        HASH_ADD_INT(pNumsHashHead, key, pTempHash);
    }
}

int* twoSum(int* nums, int numsSize, int target, int* returnSize) {
    pNumsHashHead = NULL;
    for(int i = 0; i < numsSize; i++){
        struct numsHash* pTempHash = Find_NumsHash(target - nums[i]);
        if(pTempHash != NULL){
            int* ret = malloc(sizeof(int) * 2);
            ret[0] = pTempHash->val;
            ret[1] = i;
            *returnSize = 2;
            return ret;
        }
        Add_NumsHash(nums[i], i);
    }
    *returnSize = 0;
    return NULL;
}

运行结果

执行用时内存消耗
4ms7.6MB
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值