(哈希)两数之和(leetcode 1)
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,需要输出他们的下标。
解决的思路:
- 通过map建立一个数和下标的映射。
- 然后扫描数组,判断数nums[i]所对应的target-nums[i]是否在map中。
- 如果找到,那么读出键对应的值也就是数的下标。
- 如果没找到,把这个数和它的下标存在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.两数之和-LeetCode
目录 一.问题描述 二.解题思想 三.解题 1.判断极端情况 2.代码实现 一.问题描述 这里直接采用的LeetCode上面的问题描述. 给定一个整数数组 nums 和一个整数目标值 target,请 ...
- 两数之和(LeetCode)
两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案.但是, ...
- 两数之和(LeetCode)——哈希表法(C语言)
上一篇文章留了个引子--用"哈希表"法来解决这个问题. 今天,我们来解决一下.为什么用哈希表法?很简单因为它--快! 讲解之前我们先来提出几个问题? 1)什么是"哈希表& ...
- 用php求两数之和,Leetcode PHP 两数之和
友情提示:此篇文章大约需要阅读 1分钟43秒,不足之处请多指教,感谢你的阅读. 题目 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的 ...
- 力扣(leetcode)-1. 两数之和
描述 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数组 ...
- LeetCode题库第1题 两数之和
两数之和 LeetCode题库第1题 两数之和 看到题,我就想到了暴力法: public int[] force(int[] nums,int target) {for (int i = 0; i & ...
- 【LeetCode】两数之和、三数之和、四数之和系列
文章目录 两数之和★ 三数之和★★ 四数之和★★ 四数相加Ⅱ★★ 最接近的三数之和★★ 此篇文章总结下力扣中的两数之和.三数之和.四数之和及一系列求数组中满足达到目标值的元组个数的问题,仔细阅读下面的 ...
- 算法训练Day6 | LeetCode:242. 有效的字母异位词(数组作哈希表);349. 两个数组的交集(Set作哈希表);202.快乐数 (Set作哈希表);1. 两数之和(Map作哈希表)
目录 LeetCode242. 有效的字母异位词 方法:数组作哈希表 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考 Leetcode349. 两个数组的交集 方法一:用Set作HashMa ...
- LeetCode 170. 两数之和 III - 数据结构设计(哈希map)
文章目录 1. 题目 2. 解题 1. 题目 设计并实现一个 TwoSum 的类,使该类需要支持 add 和 find 的操作. add 操作 - 对内部数据结构增加一个数. find 操作 - 寻找 ...
- LeetCode 1. 两数之和【哈希表】
1. 两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案 ...
最新文章
- android 获取 第三方应用,​android PackageManager的使用如何获取第三方应用程序(包)的信息,求大神指点...
- python面向对象类属性_python面向对象之类属性和类方法案例分析
- Lift当中的AnyVarTrati源码解析
- c语言二元运算符大全,C语言运算符大全
- 深入理解Android 卷I 提供预定
- 研一寒假02-指针_new分配内存_使用new来创建动态数组_使用动态数组_使用delete来释放new分配的内存...
- 牛客题霸 [ 环形链表的约瑟夫问题] C++题解/答案
- 查看目录是否为内存盘_Linux buff/cache内存释放
- The command could not be located because '/sbin' is not included in the PATH environment variable.
- Python 路径问题--No such file or directory
- MAC OS 修改环境变量
- linux服务器操作系统
- java 金额数字转换大写算法
- xpwifi热点设置android,WinXP笔记本设置WiFi热点的方法
- java list 时间排序吗_java collection.sort()根据时间排序list | 学步园
- CentOS 7.2设置中英文环境
- 飞天5K实战经验:大规模分布式系统运维实践
- c打包html,cmake使用教程(十一)-使用cpack打包源码并编写自动化脚本上传到仓库...
- LintCode 488.快乐数
- QT pro中加入文件拷贝方法
热门文章
- Kubernetes 部署 Ingress 控制器 Traefik v2.1
- 使用Nodejs搭建server
- Vuetable-2使用全纪录
- 推挽输出和开漏输出_关于51单片机IO口的输出模式结构
- 中南大学12月13日考c语言,中南大学2010级C语言试卷
- vue如何把数组转为json数组_vue.js,_vuejs Ajax取得一个数据json数组,vue.js - phpStudy...
- cmd代码表白_手把手教你把Python代码转成exe
- DS1819 对应版本的FFMPEG_OpenCV开发笔记(七十):红胖子带你傻瓜式编译VS2017x64版本的openCV4...
- Win10声音图标呈灰色的解决教程
- springboot配置多项目下统一切换不同环境变量profile办法