当前位置: 首页 > news >正文

LeetCode1两数之和

在这里插入图片描述
**思路:**懒得写了,如代码所示

/**
 * 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;
}

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

/**
 * 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;
}
http://www.dtcms.com/a/98847.html

相关文章:

  • Ubuntu社区论坛正确网址
  • Elea AI:以人工智能之力推动病理实验室革新的技术突破与实践探索
  • 10-项目需求变更时如何处理
  • sqli-labs靶场 less 9
  • Banner区域
  • Cursor 汉化教程
  • react学习
  • C++中的new、malloc、realloc、calloc——特点?函数原型?释放方式?区别?校招面试常问内容?
  • 中断管理常用API(四)
  • 马斯克:1130 亿美元的操作,X 网友:有点感觉被卖了…
  • 基于烟花算法(Fireworks Algorithm,FWA)及三次样条的机器人路径规划,50个场景任意选择,完整MATLAB代码
  • C语言学习笔记(抱佛脚版)
  • MyBatis基础三(注解开发)
  • 迅为iTOP-RK3576人工智能开发板Android 系统接口功能测试
  • 一阶谓词逻辑表示法、产生式表示法、框架表示法深度对比
  • stack的详细介绍,queue的详细介绍
  • 转发和重定向的区别详解
  • Java的string默认值
  • ffuf:一款高效灵活的Web模糊测试利器
  • 右值和右值引用【C++】
  • onlyoffice 多核心研究
  • 763划分字母区间解题记录
  • java基础:常见类和对象
  • 游戏被外挂攻破?金融数据遭篡改?AI反作弊系统实战方案(代码+详细步骤)
  • Linux|gitlab|二进制快速安装部署gitlab-ce教程
  • 19_20 js es6
  • std::countr_zero
  • 模型苏醒计划:Threejs 让静态模型「叛逆」起来
  • Java.util.logging (JUL) 终极指南:从基础配置到高级玩法
  • 外观模式_结构型_GOF23