力扣刷题(1): 两数之和
1 问题描述
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和 为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。
2 问题分析
这个问题,是大部分力扣刷题的第一个题,包括作者自己。为了记录一下自己的刷题过程,特此记录在CSDN。供大家参考。
首先,给出一个数组,例如, [ 2 , 11 , 15 , 7 ] [2,11,15,7] [2,11,15,7],里面有四个元素,这里我们需要找出两个特务,我们不知道这两个特务是什么值,但是,知道,他们两个之和是 9 9 9。
现在的任务是,找出这两个特务藏匿的位置!
怎么办呢?
这四个家伙挨着排队,过来检查。
第一个:
2
2
2,第二个:
11
11
11,第三个:
15
15
15,第四个:
7
7
7。
(1)step 1:
2
2
2,第一个人,先把它关进小黑屋!
(2)step 2:
11
11
11,第二个人,检查一下,它和小黑屋的人,是不是相加等于
9
9
9。
小黑屋里只有 2 2 2, 11 + 2 = 13 11+2=13 11+2=13,不是 9 9 9。
好吧,把 11 11 11关进小黑屋。
(3)step 3:
15
15
15,第三个人,检查一下,它和小黑屋的人,是不是相加等于
9
9
9。
小黑屋里有 2 2 2, 11 11 11,相加起来都不是 9 9 9。
把 15 15 15关进小黑屋!
(2)step 4:
7
7
7,第四个人。发现!它和小黑屋里的
2
2
2相加等于
9
9
9!
这俩人是特务!
2
2
2在位置
0
0
0,
7
7
7在位置
3
3
3!
3 python实现
这就是代码:
class Solution:
def twoSum(self, nums, target):
n = len(nums)
hashtable = dict()
for i in range(n):
if target - nums[i] in hashtable:
return [hashtable[target - nums[i]], i]
else:
hashtable[nums[i]] = i
return []
python中的class定义了一个类,叫做Solution,里面定义了一个函数,叫做twoSum。
这个函数,有两个输入,分别叫做 nums 和 target,nums 是需要搜索的可疑人员,即数组。target 是唯一知道的信息。
您可能觉得,不对啊,还有个 self, 这是啥? 哈哈哈,甭管,python里,在类里定义的函数,第一个参数都写,self。
为啥?其实,俺也不太了解,不是计算机专业,半路出家,以后专门写个小文说一下为什么要写self。
hashtable 就是我们的小黑屋。 一开始小黑屋里什么都没有,是空的。
hashtable = dict()
hashtable其实是哈希表,或者叫散列表,通过python中的字典,实现,具体为什么叫"哈希",以后再说,别纠结!
下面这个就是判断,这个数和小黑屋里的数相加是否等于 9 9 9!
if target - nums[i] in hashtable:
这个就是,关进小黑屋!
hashtable[nums[i]] = i
好了,就解释到这了!
4 运行结果
spyder编译器内写的程序:
运行结果如下:
再看看力扣中的运行结果:
好了,完成了!记得点赞收藏噢。