1.题目

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

示例 1:

输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例 2:

输入:nums = [3,2,4], target = 6
输出:[1,2]
示例 3:

输入:nums = [3,3], target = 6
输出:[0,1]

提示:

2 <= nums.length <= 104
-109 <= nums[i] <= 109
-109 <= target <= 109
只会存在一个有效答案
进阶:你可以想出一个时间复杂度小于 O(n2) 的算法吗?

2.分析与解答

2.1基础知识

map是STL的一个关联容器。

map<string,int> cnt;//前键后值,键就可以理解为索引,每个索引只能在map中出现一次

map中修改数据:
int i = my_Map[“a”];
my_Map[“a”] = i;//索引a对应的值是i

map中的count()函数: 返回索引出现的次数,由于map中索引只出现一次,所以返回只会是0或1.

a[i],其实提供了一个i到a[i]的映射

map中的count()函数,能够判断键是否出现过,同时map中的键和值也能够拥有其原本的意义。

但是用数组就有了局限性,因为如果把a[i]当成一个i到a[i]的映射,那么无法判断a[i]是否出现过。所以说一个数组作为映射的话比map作为映射表示的内涵要少。

2.2思路

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数。

也就是说,在数组里有两个数a和target-a,需要输出他们的下标。

解决的思路:

  1. 通过map建立一个数和下标的映射。
  2. 然后扫描数组,判断数nums[i]所对应的target-nums[i]是否在map中。
  3. 如果找到,那么读出键对应的值也就是数的下标。
  4. 如果没找到,把这个数和它的下标存在map里。

2.3代码(c++)

class Solution {public:vector<int> twoSum(vector<int>& nums, int target) {map<int,int> a;//提供一对一的hashvector<int> b(2,-1);//用来承载结果,初始化一个大小为2,值为-1的容器bfor(int i=0;i<nums.size();i++){if(a.count(target-nums[i])>0)//如果找到一个数是target-nums[i]{b[1]=i;b[0]=a[target-nums[i]];//读出它对应的下标break;}a[nums[i]]=i;//把这个数和它的下标存在map里}return b;};
};

(哈希)两数之和(leetcode 1)相关推荐

  1. 1.两数之和-LeetCode

    目录 一.问题描述 二.解题思想 三.解题 1.判断极端情况 2.代码实现 一.问题描述 这里直接采用的LeetCode上面的问题描述. 给定一个整数数组 nums 和一个整数目标值 target,请 ...

  2. 两数之和(LeetCode)

    两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案.但是, ...

  3. 两数之和(LeetCode)——哈希表法(C语言)

    上一篇文章留了个引子--用"哈希表"法来解决这个问题. 今天,我们来解决一下.为什么用哈希表法?很简单因为它--快! 讲解之前我们先来提出几个问题? 1)什么是"哈希表& ...

  4. 用php求两数之和,Leetcode PHP 两数之和

    友情提示:此篇文章大约需要阅读 1分钟43秒,不足之处请多指教,感谢你的阅读. 题目 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的 ...

  5. 力扣(leetcode)-1. 两数之和

    描述 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数组 ...

  6. LeetCode题库第1题 两数之和

    两数之和 LeetCode题库第1题 两数之和 看到题,我就想到了暴力法: public int[] force(int[] nums,int target) {for (int i = 0; i & ...

  7. 【LeetCode】两数之和、三数之和、四数之和系列

    文章目录 两数之和★ 三数之和★★ 四数之和★★ 四数相加Ⅱ★★ 最接近的三数之和★★ 此篇文章总结下力扣中的两数之和.三数之和.四数之和及一系列求数组中满足达到目标值的元组个数的问题,仔细阅读下面的 ...

  8. 算法训练Day6 | LeetCode:242. 有效的字母异位词(数组作哈希表);349. 两个数组的交集(Set作哈希表);202.快乐数 (Set作哈希表);1. 两数之和(Map作哈希表)

    目录 LeetCode242. 有效的字母异位词 方法:数组作哈希表 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考 Leetcode349. 两个数组的交集 方法一:用Set作HashMa ...

  9. LeetCode 170. 两数之和 III - 数据结构设计(哈希map)

    文章目录 1. 题目 2. 解题 1. 题目 设计并实现一个 TwoSum 的类,使该类需要支持 add 和 find 的操作. add 操作 - 对内部数据结构增加一个数. find 操作 - 寻找 ...

  10. LeetCode 1. 两数之和【哈希表】

    1. 两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案 ...

最新文章

  1. android 获取 第三方应用,​android PackageManager的使用如何获取第三方应用程序(包)的信息,求大神指点...
  2. python面向对象类属性_python面向对象之类属性和类方法案例分析
  3. Lift当中的AnyVarTrati源码解析
  4. c语言二元运算符大全,C语言运算符大全
  5. 深入理解Android 卷I 提供预定
  6. 研一寒假02-指针_new分配内存_使用new来创建动态数组_使用动态数组_使用delete来释放new分配的内存...
  7. 牛客题霸 [ 环形链表的约瑟夫问题] C++题解/答案
  8. 查看目录是否为内存盘_Linux buff/cache内存释放
  9. The command could not be located because '/sbin' is not included in the PATH environment variable.
  10. Python 路径问题--No such file or directory
  11. MAC OS 修改环境变量
  12. linux服务器操作系统
  13. java 金额数字转换大写算法
  14. xpwifi热点设置android,WinXP笔记本设置WiFi热点的方法
  15. java list 时间排序吗_java collection.sort()根据时间排序list | 学步园
  16. CentOS 7.2设置中英文环境
  17. 飞天5K实战经验:大规模分布式系统运维实践
  18. c打包html,cmake使用教程(十一)-使用cpack打包源码并编写自动化脚本上传到仓库...
  19. LintCode 488.快乐数
  20. QT pro中加入文件拷贝方法

热门文章

  1. Kubernetes 部署 Ingress 控制器 Traefik v2.1
  2. 使用Nodejs搭建server
  3. Vuetable-2使用全纪录
  4. 推挽输出和开漏输出_关于51单片机IO口的输出模式结构
  5. 中南大学12月13日考c语言,中南大学2010级C语言试卷
  6. vue如何把数组转为json数组_vue.js,_vuejs Ajax取得一个数据json数组,vue.js - phpStudy...
  7. cmd代码表白_手把手教你把Python代码转成exe
  8. DS1819 对应版本的FFMPEG_OpenCV开发笔记(七十):红胖子带你傻瓜式编译VS2017x64版本的openCV4...
  9. Win10声音图标呈灰色的解决教程
  10. springboot配置多项目下统一切换不同环境变量profile办法