LeetCode - Two Sum
2017-11-23 本文已影响18人
Jansid
Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.给一个整型数组,返回数组中两个数字的下标,这两个数字之和等于给定的目标值。
你可以假设数组中恰好有一个解,并且同一个数字不能使用两次。
Example:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
分析: 从题目可以看出最多只能遍历一遍数组。那么在遍历数组的时候需要记录第一个符合条件的值的下标,并记录下一个要获取的值。因此,在遇到第一个符合条件的值时,需要记录两个值。这个时候就可以使用字典来进行存储了。
def two_sum(nums, target):
if len(nums) <= 1: return False
temp_dict = {} # 用于存第一个值的下下标和需要的值
for i in range(len(nums)): # 以下标遍历列表
# 如果当前位置的值在字典中,那么说明之前已经获取到了一个值
# 这时直接返回结果 之前保存的下标和当前下标
if nums[i] in temp_dict:
return [temp_dict[nums[i]], i]
else: # 如果不在字典中,则把需要的值作为键,下标作为值存在字典中
nums[target - nums[i]] = i