题目:给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
分析过程:
首先,确定给定数组中的一个数,再用目标数值与其做差,之后在数组中查询是否有与其匹配的剩余项即可。
代码
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
for i,k in enumerate(nums):
if target - k in nums[i + 1:]:
return[i, nums[i + 1:].index(target - k) + i + 1]
nums = [2,7,11,15]
target = 9
s = Solution()
print(s.twoSum(nums,target))
值得注意的点
1)查询差值时,要在数组的剩余项中进行查找,避免数据混淆;
2)因为传统的输出索引是用的index()函数,为了避免遇到数组中的值都相同的极端情况(比如nums = [3,3], target = 6,这样输出是null。),这种情况下考虑使用enumerate()函数构建一个索引序列。
小贴士
enumerate(sequence, [start=0])
# 1.关于下标的用法
>>>seasons = ['Spring', 'Summer', 'Fall', 'Winter']
>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>> list(enumerate(seasons, start=1)) # 小标从 1 开始
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
# 2.关于数值匹配的用法
>>>seq = ['one', 'two', 'three']
>>> for i, element in enumerate(seq): #第一个元素为索引,第二个元素为值。
print i, element
0 one
1 two
2 three