1.两数之和-LeetCode
目录
一、问题描述
二、解题思想
三、解题
1.判断极端情况
2.代码实现
一、问题描述
这里直接采用的LeetCode上面的问题描述。
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
下面给出示例:
二、解题思想
首先想到的方法,应该是使用两重for循环来依次遍历nums,但是时间复杂度为,这里就不给出两重for循环的代码了。
我又想到一种方法,使用一个容器p来保存传入的容器nums,然后对容器p进行排序,再接着使用双指针分别从头到尾来查找两个数值相加是否等于target。
代码如下:
vector<int> twoSum(vector<int>& nums, int target) {vector<int> p = nums;sort(p.begin(), p.end());//定义左指针、右指针分别从两端开始往中间移动查找int l = 0, r = p.size() - 1;while (l != r) {if (p[l] + p[r] < target) {l++;}else if (p[l] + p[r] > target) {r--;}else {break;}}//如果这里左右下标相等的话或者累加不等于 target 则直接返回{}//可以防止两个数重复加两遍的情况if (l == r || p[l] + p[r] != target) {return {};}int m = 0, n = 0;for (int i = 0; i < nums.size(); i++) {if (p[l] == nums[i]) {m = i;}}//注意这里从右边往左遍历,是为了防止出现相同的数例如[3,3] target == 6时的情况for (int i = nums.size()-1; i >=0 ; i--) {if (p[r] == nums[i]) {n = i;}}return { m,n };}
下面是提交通过截图:
上面这种解法虽然不错,但是还有更好的解法。
最后介绍使用哈希表来完成的一种解法:
我们这里将两数之和等于target的两数叫 x、y
- 首先建立一个包含key 和 value 的哈希表,注意这里因为我们需要返回的是下标,所以将下标作为value,数值作为key。
- 然后在哈希表中查找是否有 target - y的差,也就是是否有 x 存在过了,那么将 x 的 key 和value赋值给 keyValue,如果没有的话,keyValue则等于hashTable.end()。
- 如果有x存在的话,返回x的value值和当前循环的下标值 i 。
三、解题
1.判断极端情况
使用哈希表没有特殊的极端情况。
2.代码实现
vector<int> twoSum(vector<int>& nums, int target) {unordered_map<int, int> hashTable;for (int i = 0; i < nums.size(); ++i) {//如果找到差值,则返回差值的key 和value 没找到则返回hashTable.end()auto keyValue = hashTable.find(target - nums[i]);//it 不等于 end() , 则说明之前存过当前数值的差值 if (keyValue != hashTable.end()) {//这里keyValue->sencond是之前得差值得下标,i是当前数值得下标return { keyValue->second, i };}//数值为key 下标为value 通过数值来索引valuehashTable[nums[i]] = i;}return {};}
以上就是对于本题,我看资料所编写出来得题解,如果有更好的方法,欢迎大家在下方留言,一起讨论。
1.两数之和-LeetCode相关推荐
- 两数之和(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】两数之和、三数之和、四数之和系列
文章目录 两数之和★ 三数之和★★ 四数之和★★ 四数相加Ⅱ★★ 最接近的三数之和★★ 此篇文章总结下力扣中的两数之和.三数之和.四数之和及一系列求数组中满足达到目标值的元组个数的问题,仔细阅读下面的 ...
- java 1099_【LeetCode(Java) - 1099】小于 K 的两数之和
[LeetCode(Java) - 1099]小于 K 的两数之和 [LeetCode(Java) - 1099]小于 K 的两数之和 文章目录 1.题目描述 2.解题思路 3.解题代码 1.题目描述 ...
- Leetcode刷题第1题:两数之和(基于Java语言)
** Leetcode刷题第1题:两数之和(基于Java语言) ** 题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标 ...
- 【前端来刷LeetCode】两数之和与两数相加
大部分玩前端的小伙伴,在算法上都相对要薄弱些,毕竟调样式.调兼容就够掉头发的了,哪还有多余的头发再去折腾. 确实在前端中需要使用到算法的地方是比较少,但若要往高级方向发展,算法的基本功就非常重要啦.对 ...
最新文章
- LiveData ViewModel 使用详解
- mysql 5.7.15 安装_mysql 5.7.15 安装配置方法图文教程
- 值得尝试的 3 个 Linux 终端
- 操作符offset 和 jmp指令
- mysql 单表卡死
- 盘点三个JavaScript案例——实现限时秒杀、定时跳转、改变盒子大小
- 数据结构与算法:终于可以用三种语言(C,C#,JavaScript)把图的广度优先遍历讲清楚了(推荐收藏)
- [ECMAScript] 说说你对Babel的了解?
- typescript箭头函数参数_Typescript 入门基础篇(一)
- 第五章 ---- 面向对象(二)
- Python被誉为神奇的“胶水语言”,到底神奇在哪?
- 14. model(2)
- 2021-09-10二叉树的层序遍历
- Unity3D物理渲染算法研究【PBR】
- snipaste和PS工具
- 【学习笔记】Arduino uno r3 控制led灯闪烁
- 圆锥形怎么画_如何画圆锥体的展开图?
- 四大行业晋身今秋求贤大户 游戏人才缺口奇大
- 正态总体均值假设检验
- WEKA-Instances-从内存中创建数据集
热门文章
- 离你最近的疫情小区,终于可以自己查了!
- 贯穿 C++ 11 与 C++ 17 的 Lambda 到底是个什么?
- 微软“杀”不死的数据库软件
- 微软成功尝试:员工周休三天、待遇不变,工作效率却提高40%!
- 漫画:什么是希尔排序?
- 华为最强自研 NPU 问世,麒麟 810 测评远超骁龙系列!
- 不想打造物联网的制造型企业不是一家合格的百年老店
- 百度贴吧 2017 前贴子无法访问;网易腾讯游戏获批;苹果反垄断案败诉 | 极客头条...
- 揭秘苹果“地下黑工厂”:临时工薪资无保障,男厕所门口排长龙
- 这段 JavaScript 代码能挖出你所有的访问记录!