leetcode的题目1. 两数之和(map的使用)

给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。

你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9

所以返回 [0, 1]

我的思路:利用双重循环,判断两数之和是否为t,相同就新建一个数组,分别将两个数的下标放进数组并返回。注意:这里不能使用排序,因为排序后,数字的位置就会改变,本题需要的返回的是下标。

思路:使用循环将数组放进map中,数组的值作为key,下标作为value。遍历数组的元素,每一次计算target与元素的差,然后在map中寻找是否存在改差,存在则新建一个数组,将该元素的下标以及map的value放进数组中并返回。注意:target可能在存在半数(target/2的值),所以不仅要判断时候找到,而且要判断两个下标是否相同,相同则不对,进入下一轮遍历。要先判断是否找到,再判断下标是否相同,否则如果没有找到就会返回end()【NULL】,对null操作都会报错。

map小结:https://blog.csdn.net/shuzfan/article/details/53115922

定义:map<int,int>名称;

获取值:map<int,int> a;   a->first (取key值)   a->second  (取value值)

寻找map中是否存在某个值:a.find(值);   返回一个迭代器(相当于该类型的指针,使用时要先定义指针指向它)例如:map<int,int >::iterator it=a.find(值);   it->first......

ps:C++11以上可以对类型名称进行简化,使用auto 可以自动找到其类型,

简化后: auto it=a.find(值);

遍历map的key和value:定义一个迭代器it(相当于指针)先指向map的开始(a.begin()),操作后,it++(将指针后移),知道it=a.end() (指向null结束)。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,793评论 0 33
  • leetcode刷题记录本文记录一下leetcode刷题记录,记录一下自己的解法和心得。 LeetCode Two...
    EarthChen阅读 3,529评论 0 6
  • 动态规划 111. 爬楼梯思路类似斐波那契数列注意考虑第 0 阶的特殊情况 272. 爬楼梯 II思路类似上题,只...
    6默默Welsh阅读 2,487评论 0 1
  • 我承认我有病,而且还病得不轻。不过,不必惊讶,这种病很多人都有,只是我病得比较重而已,没有什么大惊小怪。 医生说我...
    北风吹来阅读 558评论 0 0
  • 亲子日记 5.18 星期五 晴 今天中午吃完饭,孩子突然说今下午不去上学了。听了感到有点小紧张,怎么...
    平安_f604阅读 231评论 0 0