力扣第一题 两数之和 C语言

damong刷leetcode第一天

我的目标是嵌入式电机方向的高手,所以我使用的是C语言。

#include <stdlib.h> 

typedef struct{
    int key;
    int val;
    UT_hash_handle hh;
}  HashTable;

int* twoSum(int* nums, int numsSize, int target, int* returnSize){
    HashTable *hash = NULL;
    HashTable *item;

    for(int i = 0;i<numsSize;i++){
        int A = target - nums[i];
        HASH_FIND_INT(hash,&A,item);

        if(item){
            int* result = malloc(sizeof(HashTable));
            result[0] = item->val;
            result[1] = i;
            *returnSize = 2;
            return result; 
        }

        else {
            item = (HashTable*)malloc(sizeof(HashTable));
            item->key = nums[i];
            item->val = i;
            HASH_ADD_INT(hash, key, item);
        }
    }

    *returnSize = 0;
    return NULL;

}

这道题有两种经典解法,一个是双for,另一个就是哈希。双for不过多解释,这里的代码例程是哈希。说的超过100%我也不知道他这个评判具体是怎样的,提交三次最低91.5%左右。

其中在力扣中不用添加uthash.h文件,也不用引用这个头文件。对于mcu来说一味追求时间不是一件明智的事情,比如在查找判断中条件为真的分支里面malloc可以不用申请那么大的内存空间申请int*2就可以了,但是这样更快。这时候有人问了,那我直接写malloc(8)不就又省空间又快吗,就像我刚才说的我想成为嵌入式电机方向的高手,我怎么知道那些奇怪东西把int当成几个字节?这样写省我。(说是成为电机方向的高手,其实我之前就是在参加比赛的时候用过有刷电机和舵机,不过很快我就能成为机王)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值