题目:两数之和
给定一个整数数组 nums
和一个目标值 target
,在数组中找出和为目标值的两个数,并返回它们的数组下标。
你可以假设每个输入只对应一个答案,但数组中同一个元素不能使用两遍。
示例:
输入:nums = [2, 7, 11, 15]
,target = 9
输出:[0, 1]
解释:因为 nums[0] + nums[1] = 2 + 7 = 9
,返回下标 [0, 1]
。
要求:
请实现一个算法,时间复杂度为 O(n)。
解题思路:
使用一个哈希表来存储数组中每个数字及其对应的下标。
遍历数组,计算目标值与当前数字的差值,如果差值在哈希表中存在,则返回当前下标和差值对应的下标。
如果不存在,则将当前数字和下标存入哈希表,key是当前数字,value是下标值。
Python 示例代码:
def two_sum(nums, target):
num_to_index = {}
for index, num in enumerate(nums):
complement = target - num
if complement in num_to_index:
return [num_to_index[complement], index]
num_to_index[num] = index
return []
# 测试
print(two_sum([2, 7, 11, 15], 9)) # 输出: [0, 1]
你可以尝试实现这个算法,并理解其中的逻辑和用法。祝你面试顺利!
想系统学习python算法的同学,可以添加吴老师微信:wulaoshi1978