「leetcode」1. 两数之和:map等候多时了
第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等候多时了相关推荐
- LeetCode:1.两数之和
LeetCode:1.两数之和 第一次写题解,也第一次做leetcode,不妥之处还望海涵 一.暴力 //cpp class Solution {public:vector<int> tw ...
- LeetCode题 - 1 两数之和
LeetCode题 - 1 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案. ...
- LeetCode刷题-两数之和(持续更新)
文章目录 LeetCode 1. Two Sum (两数之和) 题目描述 样例 解题思路一(暴力法) 解题思路二(使用map) 前言:最近业余时间,一直在看LeetCode上面的题,上面有许多好的解题 ...
- leetcode系列--1.两数之和
leetcode 第1题 两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输 ...
- [Leetcode]Two sum(两数之和)系列总结
Two sum 题目 Given an array of integers, return indices of the two numbers such that they add up to a ...
- 【Leetcode | easy】两数之和
题目 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums = [2, 7, 11, 15], targ ...
- LeetCode 01【两数之和】【LeetCode人生第一题!】
刷题官网:https://leetcode-cn.com/ 目 录 题目 官方题解 方法一:暴力法 方法二:两遍哈希表 方法三:一遍哈希表 初次提交 题目 官方题解 方法一:暴力法 暴力法很简单, ...
- 20190815:(leetcode习题)两数之和(2种方法)
两数之和 题目 大致思路 代码实现 题目 大致思路 暴力法:直接双层遍历判断是否符合相邻两数之和与target相等. HashMap法:HashMap存入所有的数组值和对应的数组索引,再次遍历进行判断 ...
- Leetcode 1:两数之和
写在前面 Leetcode 社区挺神奇的,近几年火热程度不亚于开源社区github.做题一直以来是咱们亚洲人的强项,咋这香馍馍也被美国硅谷抢先了,着实香菇. 企于算法工程师的江湖地位和薪资福利,决定先 ...
- 【LeetCode】1.两数之和
1.两数之和 一.问题描述 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案.但 ...
最新文章
- Rushcrm:企业部署CRM系统做什么
- 【vijos】P1448 校门外的树
- ueditor 不显示工具栏_Python 之Django富文本框Ueditor的使用
- ngrok工具的介绍与使用,以及使用此工具时注意的事项
- 【Spark】Spark ML 机器学习的一个案例
- 【机器学习-西瓜书】三、线性回归;对数线性回归
- Gallery3d 学习笔记(6)
- HDU4730 We Love MOE Girls
- 关闭微信朋友圈和公众号的广告
- 苹果的破局几招:修漏洞、降价、官方认证翻新机……
- WebRequest、WebResponse的使用示例
- linux环境下单网卡配置多个IP地址(详细)
- 什么是西安80坐标系
- led灯串怎么摆造型_用灯带设计的造型图片
- 游戏版署版本心得(一)
- 吉林大学珠海学院计算机录取分数线,吉林大学珠海学院2018年录取分数线
- (Qt项视图Demo)封装下链式结构(QListView)的MVC(MVD)用法
- Redis工具类封装RedisUtils(两种)
- DOCSIS 3.1 MAC management messages(MMM)--- 1.MAC Management Message Header
- Java基础总结--面试答案个人总结
热门文章
- IOS开发之----四舍五入问题
- 在ASP.NET的服务器端使用message box(Message box Server side in ASP.Net)
- window.innerHeight和document.documentElement.clientHeight区别
- 关于time_wait状态的理解
- php对引用的简单理解
- scope=“prototype”和scope=“session”
- HDU 1087 Super Jumping! Jumping! Jumping!(DP)
- JS function 函数基本定义方法
- 自己动手开发编译器(二)正则语言和正则表达式
- 从Visual studio 2005移出Visual Assist