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

【leetcode】两数之和【简单】( 注释详解:C++map/ C哈希表)

 本题为函数题,函数头固定如下:

C++:

 vector<int> twoSum(vector<int>& nums, int target)

 C:

int* twoSum(int* nums, int numSize, int target, int* returnSize)

下面是时间复杂度为O(n)的代码

C++AC代码:

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {vector<int>re;//存储结果和返回map<int, int>mp;//用以实现类似“字典”的功能//第一个元素存储当前nums中访问的值,第二个元素存储它的下标for(int i=0; i<nums.size(); i++)//每个数字访问且仅访问一次{auto it = mp.find(target - nums[i]);if(it != mp.end())//找到了{re.push_back(i);re.push_back(it->second);return re;}mp.insert(pair<int, int>(nums[i], i));}}
};

C详解代码(代码思路来自leetcode官方题解)

#include<bits/stdc++.h>
#include"uthash.h"
using namespace std;typedef struct{int key;//本质是要查找的对象//本题中存储nums中的值int val;//本质是key的对应信息//本题中存储key值在nums中的下标UT_hash_handle hh;
}HS;
HS* hashtable;HS* find(int ikey)
{HS* tmp;//初始化一个HS*类型准备接收结果HASH_FIND_INT(hashtable, &ikey, tmp);return tmp;
}void insert(int ikey, int ival){HS* it = find(ikey);if(!it)//若原先不存在该键{HS* tmp = (HS*)malloc(sizeof(HS));//则申请新空间,tmp->key = ikey;//赋予键值HASH_ADD_INT(hashtable, key, tmp);//插入哈西表}else{//已经存在该键it->val = ival;//直接修改键对应的值}
}int* twoSum(int* nums, int numSize, int target, int* returnSize)
{hashtable = NULL;for(int i=0; i<numSize; i++){HS* it = find(target-nums[i]);//尝试查找nums中是否存在该值if(it)//存在{int* ret = (int*)malloc(sizeof(int)* 2);//构造可容纳两个整数的数组, 作为返回值ret[0] = it->val;ret[1] = i;*returnSize = 2;return ret;//最终返回一个二元数组}//若没有找到, 则将当前nums中元素插入哈西表insert(nums[i], i);}
}

~希望对你有帮助~

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 高级java每日一道面试题-2024年7月27日-并发篇-Thread类中的yield方法有什么作用?
  • 基于STM32的多协议通信系统设计与实现
  • 知,已经在行;知行是一件事,不是两件事
  • 大厂面试官问我:ConcurrentHashMap底层原理?【后端八股文十五:Java集合合集】
  • 从 Pandas 到 Polars 三十八:Polars 的“瘦身”功能
  • GPU驱动、CUDA 、cuDNN 和CUDA Toolkit之间的关系(深度学习小白必懂)
  • Linux Gui 窗口对话和窗口操作
  • opencascade AIS_Manipulator源码学习
  • Pytorch 9
  • dsp c6657 SYS/BIOS学习笔记
  • 用Postman Flows打造你的专属API:外部公开,轻松上手!
  • 【python_将列表拆分成几组,分批次写入excel】
  • 美食聚焦 -- 仿大众点评项目技术难点总结
  • langchain 入门指南 - 文本分片及向量化
  • 给定日期计算时间(2025新年倒计时)
  • __proto__ 和 prototype的关系
  • C++类的相互关联
  • co.js - 让异步代码同步化
  • CSS实用技巧干货
  • ECMAScript6(0):ES6简明参考手册
  • JAVA多线程机制解析-volatilesynchronized
  • js写一个简单的选项卡
  • Koa2 之文件上传下载
  • magento 货币换算
  • PHP那些事儿
  • Python学习之路13-记分
  • sublime配置文件
  • 机器学习学习笔记一
  • 浏览器缓存机制分析
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 学习HTTP相关知识笔记
  • 因为阿里,他们成了“杭漂”
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #java学习笔记(面向对象)----(未完结)
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (八十八)VFL语言初步 - 实现布局
  • (第61天)多租户架构(CDB/PDB)
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (算法)求1到1亿间的质数或素数
  • (译)2019年前端性能优化清单 — 下篇
  • ****三次握手和四次挥手
  • *p++,*(p++),*++p,(*p)++区别?
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .NET 事件模型教程(二)
  • .Net 中Partitioner static与dynamic的性能对比
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args