第1题. 两数之和

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

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

「示例:」

给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

思路

很明显暴力的解法是两层for循环查找,时间复杂度是O(n^2)。

使用哈希法最为合适,之前已经介绍过,数组和set在哈希法中的应用,那么来看一下使用数组和set来做哈希法的局限。

  • 数组的大小是受限制的,而且如果元素很少,而哈希值太大会造成内存空间的浪费。

  • set是一个集合,里面放的元素只能是一个key,而两数之和这道题目,不仅要判断y是否存在而且还要记录y的下表位置,因为要返回x 和 y的下表。所以set 也不能用。

此时就要选择另一种数据结构:map ,map是一种key value的存储结构,可以用key保存数值,用value在保存数值所在的下表。

C++中map,有三种类型:

std::unordered_map 底层实现为哈希表,std::map 和std::multimap 的底层实现是红黑树。

同理,std::map 和std::multimap 的key也是有序的(这个问题也经常作为面试题,考察对语言容器底层的理解)。 更多哈希表的理论知识请看关于哈希表,你该了解这些!。

「这道题目中并不需要key有序,选择std::unordered_map 效率更高!」

C++代码

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {std::unordered_map <int,int> map;for(int i = 0; i < nums.size(); i++) {auto iter = map.find(target - nums[i]);if(iter != map.end()) {return {iter->second, i};break;}map.insert(nums[i], i);}return {};}
};

本文:https://github.com/youngyangyang04/leetcode-master​已经收录,里面还有leetcode刷题攻略、各个类型经典题目刷题顺序、思维导图看一看一定会有所收获,如果对你有帮助也给一个star支持一下吧!

我是程序员Carl,哈工大师兄,先后在腾讯和百度从事技术研发多年,利用工作之余重刷leetcode,更多   精彩算法文章尽在:   代码随想录,关注后,回复「Java」「C++」「python」「简历模板」等等,有我整理多年的学习资料,可以加我   微信,备注「个人简介」+「组队刷题」,拉你进入刷题群(无任何广告,纯个人分享),每天一道经典题目分析,我选的每一道题目都不是孤立的,而是由浅入深一脉相承的,如果跟住节奏每篇连续着看,定会融会贯通。

「leetcode」1. 两数之和:map等候多时了相关推荐

  1. LeetCode:1.两数之和

    LeetCode:1.两数之和 第一次写题解,也第一次做leetcode,不妥之处还望海涵 一.暴力 //cpp class Solution {public:vector<int> tw ...

  2. LeetCode题 - 1 两数之和

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

  3. LeetCode刷题-两数之和(持续更新)

    文章目录 LeetCode 1. Two Sum (两数之和) 题目描述 样例 解题思路一(暴力法) 解题思路二(使用map) 前言:最近业余时间,一直在看LeetCode上面的题,上面有许多好的解题 ...

  4. leetcode系列--1.两数之和

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

  5. [Leetcode]Two sum(两数之和)系列总结

    Two sum 题目 Given an array of integers, return indices of the two numbers such that they add up to a ...

  6. 【Leetcode | easy】两数之和

    题目 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums = [2, 7, 11, 15], targ ...

  7. LeetCode 01【两数之和】【LeetCode人生第一题!】

    刷题官网:https://leetcode-cn.com/ 目   录 题目 官方题解 方法一:暴力法 方法二:两遍哈希表 方法三:一遍哈希表 初次提交 题目 官方题解 方法一:暴力法 暴力法很简单, ...

  8. 20190815:(leetcode习题)两数之和(2种方法)

    两数之和 题目 大致思路 代码实现 题目 大致思路 暴力法:直接双层遍历判断是否符合相邻两数之和与target相等. HashMap法:HashMap存入所有的数组值和对应的数组索引,再次遍历进行判断 ...

  9. Leetcode 1:两数之和

    写在前面 Leetcode 社区挺神奇的,近几年火热程度不亚于开源社区github.做题一直以来是咱们亚洲人的强项,咋这香馍馍也被美国硅谷抢先了,着实香菇. 企于算法工程师的江湖地位和薪资福利,决定先 ...

  10. 【LeetCode】1.两数之和

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

最新文章

  1. Rushcrm:企业部署CRM系统做什么
  2. 【vijos】P1448 校门外的树
  3. ueditor 不显示工具栏_Python 之Django富文本框Ueditor的使用
  4. ngrok工具的介绍与使用,以及使用此工具时注意的事项
  5. 【Spark】Spark ML 机器学习的一个案例
  6. 【机器学习-西瓜书】三、线性回归;对数线性回归
  7. Gallery3d 学习笔记(6)
  8. HDU4730 We Love MOE Girls
  9. 关闭微信朋友圈和公众号的广告
  10. 苹果的破局几招:修漏洞、降价、官方认证翻新机……
  11. WebRequest、WebResponse的使用示例
  12. linux环境下单网卡配置多个IP地址(详细)
  13. 什么是西安80坐标系
  14. led灯串怎么摆造型_用灯带设计的造型图片
  15. 游戏版署版本心得(一)
  16. 吉林大学珠海学院计算机录取分数线,吉林大学珠海学院2018年录取分数线
  17. (Qt项视图Demo)封装下链式结构(QListView)的MVC(MVD)用法
  18. Redis工具类封装RedisUtils(两种)
  19. DOCSIS 3.1 MAC management messages(MMM)--- 1.MAC Management Message Header
  20. Java基础总结--面试答案个人总结

热门文章

  1. IOS开发之----四舍五入问题
  2. 在ASP.NET的服务器端使用message box(Message box Server side in ASP.Net)
  3. window.innerHeight和document.documentElement.clientHeight区别
  4. 关于time_wait状态的理解
  5. php对引用的简单理解
  6. scope=“prototype”和scope=“session”
  7. HDU 1087 Super Jumping! Jumping! Jumping!(DP)
  8. JS function 函数基本定义方法
  9. 自己动手开发编译器(二)正则语言和正则表达式
  10. 从Visual studio 2005移出Visual Assist