LeetCode1两数之和

**思路:**懒得写了,如代码所示

c 复制代码
/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
struct hashTable
{
    int key;//存值
    int val;//存索引
    UT_hash_handle hh;
};
int* twoSum(int* nums, int numsSize, int target, int* returnSize)
{
    struct hashTable *hash=NULL;//定义一个空哈希数组
    *returnSize=2;
    int *resnum=(int *)malloc(2*sizeof(int));//定义返回数组
    //先将nums写入哈希数组中
    for(int i=0;i<numsSize;i++)
    {
        struct hashTable *tmp;
        tmp=(struct hashTable*)malloc(sizeof(struct hashTable));
        tmp->key=nums[i];
        tmp->val=i;
        HASH_ADD_INT(hash, key, tmp);
    }
    //遍历nums查找哈希数组中是否有相加=target的数
    for(int i=0;i<numsSize;i++)
    {
        int t=target-nums[i];//t暂存需要查找的数
        struct hashTable *tmp;//查找结果指针
        HASH_FIND_INT(hash,&t,tmp);//查找t是否在哈希数组中,返回值是指针
        if(tmp!=NULL&&tmp->val!=i)
        {
            resnum[0]=i;
            resnum[1]=tmp->val;
            return resnum;
        }
    }
    return resnum;
}

优化一下,改成边查找边插入,一次循环即可

c 复制代码
/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
struct hashTable
{
    int key;//存值
    int val;//存索引
    UT_hash_handle hh;
};
int* twoSum(int* nums, int numsSize, int target, int* returnSize)
{
    struct hashTable *hash=NULL;//定义一个空哈希数组
    *returnSize=2;
    int *resnum=(int *)malloc(2*sizeof(int));//定义返回数组
    //先将nums写入哈希数组中
    for(int i=0;i<numsSize;i++)
    {
        struct hashTable *tmp;//查找结果指针
        int t=target-nums[i];//t暂存需要查找的数
        HASH_FIND_INT(hash,&t,tmp);//查找t是否在哈希数组中,返回值是指针
        if(tmp!=NULL)
        {
            resnum[0]=i;
            resnum[1]=tmp->val;
            return resnum;
        }
        tmp=(struct hashTable*)malloc(sizeof(struct hashTable));//注意这里需要在查找完是否存在后再分配内存,不然tmp会返回为NULL,造成空指针报错
        tmp->key=nums[i];
        tmp->val=i;
        HASH_ADD_INT(hash, key, tmp);
    }
    return resnum;
}
相关推荐
有梦想的骇客2 小时前
书籍将正方形矩阵顺时针转动90°(8)0605
线性代数·算法·矩阵
有梦想的骇客2 小时前
书籍“之“字形打印矩阵(8)0609
java·算法·矩阵
Chenyu_3103 小时前
12.找到字符串中所有字母异位词
c语言·数据结构·算法·哈希算法
苏三福3 小时前
yolo11-seg ultralytics 部署版本
算法·yolo11
wuqingshun3141596 小时前
蓝桥杯 冶炼金属
算法·职场和发展·蓝桥杯
豪斯有话说7 小时前
C++_哈希表
数据结构·c++·散列表
jndingxin7 小时前
OpenCV CUDA模块光流计算-----实现Farneback光流算法的类cv::cuda::FarnebackOpticalFlow
人工智能·opencv·算法
编程绿豆侠7 小时前
力扣HOT100之栈:394. 字符串解码
java·算法·leetcode
朝朝又沐沐8 小时前
基于算法竞赛的c++编程(18)string类细节问题
开发语言·c++·算法